# Welcome

Welcome to More Good Reviews. An overview of review collection, AI tools, and the MCP Server.

Welcome to **More Good Reviews**. This is your home for collecting reviews, watching your reputation grow, and keeping up with customer feedback.

MGR helps you ask customers for reviews at the right time by email or SMS, send them to a branded review page, and follow up with reminders. From there you can sync Google and Facebook reviews, reply, and show off the best feedback on your site.

<a href="https://moregoodreviews.com/signup" class="button primary">Sign Up</a><a href="https://moregoodreviews.com/login" class="button secondary">Log In</a>

New here? Start with [Getting Started](/platform/getting-started).

***

### How It Works

1. **Import customers** – Bring people in from Stripe, HubSpot, a CSV, or by hand.
2. **Set your strategy** – Choose when to ask for a review and how reminders work.
3. **Customize your review page** – Customers rate you, then leave feedback or head to Google, Facebook, and more.
4. **Turn on Automate** – We send requests on your schedule. Each customer is asked at most once.
5. **Manage what comes in** – Sync reviews, reply, hide what you do not want public, and track results.

***

### Built-In AI

MGR includes [AI Tools](/platform/ai-tools) for the moments that take the most time:

* Help customers write reviews on your page
* Highlight strong phrases in widgets and your showcase
* Draft replies to Google reviews
* Tag feedback and score sentiment so patterns are easier to spot

Turn each piece on when you are ready, and tune the tone to match your brand.

***

### Work in Chat with the MCP Server

Want to manage reputation without clicking through every screen? Connect **Claude** or another MCP client to your project and work in plain language: customers, review requests, reviews, reports, and more.

{% hint style="info" %}
See [MCP Server](/platform/mcp-server) for setup, example prompts, and what assistants can do.
{% endhint %}

***

### What Else You Get

* Branded email and SMS templates
* Your own domain (or ours to get started faster)
* Multiple review pages for locations or campaigns
* A dashboard and Analytics page for ratings, volume, replies, and outreach
* Widgets, Showcase, and sharing tools to display reviews publicly

Browse the sidebar anytime you need details on a specific feature. This welcome page is just the map.


# Getting Started

Get from signup to your first review. Covers the Get Started checklist, Automate button, quick path, and common blockers.

This guide gets you from signup to your first review. It's written for business owners using MGR to collect reviews for their own business. After you sign up and create a project, MGR shows a **Get Started Checklist** on your dashboard. The checklist walks you through six steps before you turn on automatic review collection. You can also request reviews manually at any time—the checklist simply helps you get everything in place first.

### Before You Start

1. **Sign up** at [moregoodreviews.com](https://moregoodreviews.com/signup) or log in if you already have an account.
2. **Create a project.** A project represents your business and can have multiple locations inside it (e.g., several storefronts). You'll be prompted to create one when you first sign up.
3. **Open your dashboard.** The Get Started Checklist appears in the bottom-left corner when you have a new project.

### Where to Find the Checklist

The Get Started Checklist appears as a collapsible panel in the bottom-left corner of your dashboard when you have a new project. Click the header to expand or collapse it. Each task has a short description and a button to jump to the relevant page. When you complete a task, it’s marked with a check. You can hide the checklist at any time; it will stop showing once your project is fully onboarded.

***

## The Checklist Steps

The checklist walks you through six steps in order:

### 1. Create a Project

A project represents your business and can have multiple locations inside it (e.g., several storefronts). Go to **Settings** to configure your project name, business info, and other basics.

### 2. Import Customers

To request reviews, MGR needs your customers’ contact information (name, email, or phone). You can import customers manually, upload a CSV, connect Stripe or HubSpot, use an app connector like Zapier, or BCC your project email when sending invoices to your customers. See [Importing Customers](/importing/customers) for details.

### 3. View Strategy

Your **Request Strategy** controls when customers receive review requests—for example, after a charge, on a signup anniversary, or based on subscription status. MGR starts you with a default strategy; you can customize triggers, delays, reminders, and conditions in **Settings > Strategy**. See [Request Strategy](/platform/request-strategy) for the full picture.

### 4. View Email Templates

Your request and reminder templates are what customers see in their inbox. Both include a one-click rating option and customizable text. You can add your logo and branding. Go to **Settings > Email** to edit templates and send test emails before going live.

### 5. Customize Review Page

Your review page is where customers land when they click a link. They select a rating, then see a form, links to third-party review sites (Google, Yelp, etc.), or a redirect—depending on your setup. Go to **Review Pages** to customize text, layout, form fields, links, and redirects.

### 6. Automate

The final step is turning on automatic review collection. Once you’ve completed the steps above, click **Automate** in the checklist (or in the sidebar) to enable it. MGR will start sending review requests to your customers based on your strategy.

***

## What Happens Next

After you turn on Automate, MGR sends review requests based on your [Request Strategy](/platform/request-strategy). Requests may be delayed—for example, if your strategy sends a few days after a charge, customers won't receive a request immediately.

**Where to watch your progress:**

* **Messages** – See which requests have been sent, scheduled, opened, or clicked. Filter by status to track delivery.
* **Reviews** – New reviews appear here as customers leave feedback. Your first review is the big milestone.
* **Dashboard** – Get a quick overview of ratings and a compact Analytics grid. Click **View All** to open the full Analytics page.

***

## Quick Path (Minimum Setup)

If you want to get up and running as fast as possible:

1. **Import customers** – Connect Stripe or HubSpot, or upload a CSV. You need at least some customers before Automate can send anything.
2. **Add at least one link** to your review page – Go to **Review Pages** > your page > **Links**. Add a link to Google (the most important review site for most businesses). You can also connect [Google My Business](/platform/integrations) in **Settings > Integrations** to sync and reply to Google reviews from MGR.
3. **Review Google's rules** – Before you go live, read [Google Review Guidelines](/platform/google-review-guidelines) so your setup follows Google's policies.
4. **Turn on Automate** – Click the Automate button in the sidebar and enable automatic review collection.

You can refine your strategy, templates, and review page later. This minimum setup gets requests flowing.

***

## The Automate Button in the Sidebar

The **Automate** button appears at the top of the sidebar, above Dashboard and the other navigation items. It’s the main control for automatic review collection.

### What It Does

* **When off** – The button says **Automate**. Click it to open a modal where you can enable automatic review collection. The modal shows how many customers will receive a request when you turn it on, and it links to your strategy and templates so you can review them first.
* **When on** – The button says **Automating** and turns green with a subtle animated border. Click it again to open the same modal, where you can disable automatic review collection if you need to pause it.

### How Automatic Review Collection Works

When you enable it, MGR continuously sends review requests to your customers based on your [Request Strategy](/platform/request-strategy). Each customer is asked at most once per project (unless you manually request again). MGR can send up to three reminders if they haven’t responded. Customers can unsubscribe at any time.

The sidebar also shows how many **requests left this month** you have on your plan. This helps you stay within your plan limits.

### Tips

{% hint style="success" %}
Complete the checklist steps before turning on Automate. That way your strategy, templates, and review page are set up correctly before requests go out.
{% endhint %}

{% hint style="info" %}
You can still request reviews manually from the Customers page even when automatic collection is off. Use Automate when you’re ready to let MGR handle it for you.
{% endhint %}

{% hint style="warning" %}
When the sidebar is collapsed, the Automate control appears as a circular icon. Hover over it to see the tooltip: "Automatic Review Collection."
{% endhint %}

***

## Common Blockers

* **No customers imported** – Automate can't send requests without customers. Import at least a few before turning it on.
* **No links on your review page** – If customers give a positive rating but your review page has no links to Google (the most important), Yelp, etc., they have nowhere to leave a public review. Add at least one link in **Review Pages** > your page > **Links**.
* **Plan limits** – Check **requests left this month** in the sidebar. If you've hit your limit, you may need to upgrade your plan.

***

## Need Help?

If you get stuck, click the help bubble on the site to reach us. We're here to help you get the most out of MGR.


# Projects

Projects organize reviews for each business with customers, review pages, messaging, widgets, and related reputation tools.

A project is your main workspace for collecting and managing reviews. Each project represents one business or brand. If that brand has multiple stores or sites, add them as [locations](/platform/projects/locations) inside the same project. Everything you do (customers, review requests, forms, widgets, and integrations) lives inside a project.

### What a Project Contains

Each project has its own:

* **Customers** – The people you send review requests to
* **Reviews** – Feedback and testimonials from your customers
* **Review pages** – The pages where customers leave ratings and reviews
* **Messages** – Emails and SMS you send to request reviews
* **Widgets** – Embeddable review displays for your website
* **Settings** – Domain, appearance, request strategy, integrations, and more

When you sign up, you get a space (your account) with one project. You can add more projects if you manage multiple businesses or brands. For multiple stores under one brand, use locations inside a single project.

### Where to Find Your Projects

If you have more than one project, you can switch between them using the project selector in the header. Your current project’s name appears there. Click it to see all your projects and pick another one.

To add a new project or manage your space, go to **Account** in the sidebar (or your profile menu) and open your space. From there you can add projects, edit your space name, or leave the space.

### Adding a Project

1. Go to **Account** in the sidebar.
2. Open your space.
3. Click **Add Project**.
4. Enter a name for your project (for example, your business or brand name).
5. Click **Create**.

Your new project appears in the list. Switch to it to start setting it up—add customers, configure your review pages, and turn on automatic review collection when you’re ready.

{% hint style="info" %}
Each project is independent. Customers, reviews, and settings in one project do not affect another. If you manage several stores or branches for the same brand, add them as [locations](/platform/projects/locations) in one project rather than creating a separate project for each. Your plan limits locations across your account, so packing related locations into fewer projects keeps billing simpler.
{% endhint %}

### Project Status

Projects can be **active**, **paused**, or **suspended**:

* **Active** – Review requests are being sent according to your strategy.
* **Paused** – Review requests are temporarily stopped. You can unpause anytime.
* **Suspended** – The project has been disabled. Contact support if you believe this is an error.

You can pause or unpause a project from the dashboard using the automatic review collection toggle.

### Working With Your Team

If you want others to help manage a project, you can invite them as members. Members can have different roles—from full access to view-only—and you can control which projects each person can see.


# Settings

Set business name, description, website, slug, review visibility, search indexing, currency, analytics, and other core options.

Settings control the core details for your project. Here you can set your business name, description, and website, choose how new reviews appear on your Showcase and widgets, control search engine indexing, and manage your project slug. You can also duplicate or delete the project from this page.

### Where to Find It

Go to **Settings** in the sidebar, then click **Project**. The page is organized into sections. Each section has its own **Save** button, so click **Save** after making changes in that section before moving on.

At the top of the page, you will see your project's unique ID. This is useful if you contact support or work with an integration that needs to identify your project.

***

### Settings

The first **Settings** section on the page covers your project's basic information.

* **Business Name** — The name of your business, brand, or website. This appears throughout the platform, in emails, and on your review pages. It defaults to your Showcase title if you leave the Showcase title blank.
* **Business Description** — A short description of your products or services (at least 50 characters if you use [AI Tools](/platform/ai-tools)). The AI uses this to write review suggestions, replies, and highlights that fit your business.
* **Business Website** — Your business website URL. Optional, but helpful for context and some integrations.
* **Default Review Visibility** — Controls whether new reviews are shown or hidden on your [Showcase](/platform/showcase) and [widgets](/platform/widgets) when they first arrive:
  * **Show all reviews** — Every new review is visible on your Showcase and widgets.
  * **Show only positive reviews** — New reviews with a rating of 3 stars or below are hidden automatically. You can still show them manually from the [Reviews](/platform/projects/reviews) page.
  * **Hide all reviews** — Every new review is hidden by default. Use this when you want to review feedback before making it public.
* **Currency** — The currency used when displaying customer charge amounts and strategy conditions that reference dollar values. Choose the code that matches your business (for example, USD, EUR, or GBP).
* **Google Analytics ID** — Your Google Analytics 4 measurement ID (for example, `G-XXXXXXXXXX`). When set, page views are tracked on your review pages and Showcase. Leave blank if you do not use Google Analytics.

#### What to Expect

* Changing **Default Review Visibility** affects only new reviews going forward. Existing reviews keep their current visibility unless you change them individually.
* Your **Google Analytics ID** takes effect on the next visit to your review pages or Showcase. It does not track activity inside the MGR dashboard.

{% hint style="info" %}
Default review visibility is a starting point, not a permanent rule. You can always hide or show individual reviews from the Reviews page, regardless of this setting.
{% endhint %}

***

### Search Engines

The **Search Engines** section controls whether search engines like Google can find and list your review pages and Showcase in search results.

* **Visible to Search Engines** — Search engines can index your review pages and Showcase. This is the default. Use it when you want your reviews and Showcase to appear in search results and support your online reputation.
* **Hidden from Search Engines** — Search engines are told not to index your review pages and Showcase. The pages still work for anyone with the link, but they will not appear in search results.

#### How to Change Search Engine Visibility

1. Go to **Settings** > **Project**.
2. Find the **Search Engines** section.
3. Choose **Visible to Search Engines** or **Hidden from Search Engines**.
4. Click **Save**.

#### What to Expect

* The setting applies to all review pages and your Showcase for this project.
* A success message confirms your choice was saved.
* Search engines may take days or weeks to reflect a change. Hiding a page does not remove it from search results immediately.

{% hint style="info" %}
Hiding your pages from search engines does not make them private. Anyone who has the link can still open your review pages and Showcase.
{% endhint %}

{% hint style="warning" %}
Search engine visibility is separate from **Meta** settings under **Settings** > **Appearance**. Meta controls how your links look when shared on social media or in search previews. **Search Engines** controls whether search engines are allowed to index your pages at all.
{% endhint %}

***

### Slug

The **Slug** is a short identifier used in customer-facing emails and links when you have not set up a [custom domain](/platform/adding-your-domain).

For example, if your slug is `acme-coffee`, review links and the default sending email address may include that slug (such as `reviews+acme-coffee@moregoodreviews.net`).

* Slugs can contain letters, numbers, dashes, and underscores.
* Each slug must be unique across the platform.
* If you change your slug, existing links that use the old slug will stop working. Update any saved links, templates, or integrations that reference the old address.

{% hint style="warning" %}
If you use a custom domain for customer-facing pages or email sending, your slug matters less for public links, but it may still be used as a fallback. Choose a slug you are happy to keep long term.
{% endhint %}

***

### Space

If you belong to more than one space, a **Space** section appears on this page. It lets you move the project from one space to another.

Only space owners and Super Admins can move a project. When you move a project:

* The project and all its data (customers, reviews, settings) move to the new space.
* Members of the old space lose access to the project.
* You retain access through the new space.

This is useful when you reorganize businesses across workspaces or move a project into an agency space. For more on spaces, see [Spaces and Projects](/accounts/spaces-and-projects).

***

### Duplicate Project

Only the Owner and Super Admins see **Duplicate Project** at the bottom of the page. Click it to create a copy of your current project.

1. Click **Duplicate Project**.
2. Enter a name for the new project.
3. Click **Duplicate Project** in the dialog.

The copy includes your ratings, sources, email and SMS templates, request strategy, default review page, Showcase settings, and AI Tools configuration. It does not copy customers, reviews, logos, domain settings, or sender details. The new project starts inactive so you can review settings before turning on review collection.

After duplication, you are taken to the dashboard for the new project.

{% hint style="info" %}
Duplicating is a fast way to set up a second brand or client that follows the same review flow. For another store under the same brand, add a [location](/platform/projects/locations) instead. Add customers and turn on automatic collection when you are ready.
{% endhint %}

***

### Delete Project

Only the Owner and Super Admins see **Delete** at the bottom of the page. Click it to permanently remove the project.

You will be asked to confirm before anything is deleted. Deletion removes the project and all of its data, including customers, reviews, messages, and settings. This cannot be undone.

{% hint style="danger" %}
Deleting a project is permanent. Export any reviews or customer data you need before confirming deletion.
{% endhint %}

***

### Tips

{% hint style="success" %}
Keep **Visible to Search Engines** turned on if you want your Showcase and review pages to help potential customers find you through search.
{% endhint %}

{% hint style="info" %}
Use **Hidden from Search Engines** while testing a new review page or Showcase setup, or when you do not want those public pages listed in search results.
{% endhint %}

{% hint style="info" %}
Set **Default Review Visibility** to **Show only positive reviews** if you want your Showcase to highlight strong feedback while keeping lower ratings available for follow-up inside the platform.
{% endhint %}


# Appearance

Customize how your project looks across emails, review pages, and the Showcase. Control branding, fonts, colors, and layout.

Appearance settings control how your project looks to customers and visitors. You can customize branding, fonts, colors, and layout so everything—from review request emails to the page where customers leave reviews to your public Showcase—matches your brand and builds trust.

### Where to Find Appearance Settings

Appearance options are spread across several places in your project:

* **Settings > Appearance** – Branding and meta (SEO) settings
* **Settings > Email** – How review request emails look
* **Settings > Showcase** – How your Showcase page looks
* **Review Pages** – How each review page looks when customers leave feedback

***

### Branding (Settings > Appearance)

The **Branding** section lets you set the visual identity for your project:

* **Logo** – Your business logo. It appears in review request emails and on review pages. Upload an image (max 5MB, between 100px and 2000px). If a location has its own logo (set in **Settings > Locations**), that logo appears on review pages and kiosk pages when that location is selected instead of this project logo.
* **Icon** – A square icon (1:1 ratio) used in places where a small image fits better than a full logo.
* **Logo Height** – Control how tall the logo appears in pixels.
* **Primary Color** – A color used across your project for buttons, links, and accents. Pick one that matches your brand.

{% hint style="info" %}
Your logo and primary color help customers recognize your business when they receive a review request. Consistent branding improves trust and response rates.
{% endhint %}

***

### Meta (Settings > Appearance)

The **Meta** section controls how your project appears when shared on social media or in search results:

* **Title** – The headline shown when someone shares a link to your review page or Showcase.
* **Description** – A short summary that appears in search results and social previews.
* **Image** – An image (2:1 ratio) shown when your link is shared. Use a 1000×500px to 3000×1500px image for best results.

You can use the **Generate** option to create title and description text with AI based on your project.

{% hint style="success" %}
Good meta settings help your reviews and Showcase appear more professional when shared. This supports your reputation and makes it easier for potential customers to find you.
{% endhint %}

***

### Email Appearance (Settings > Email)

When you send review requests by email, the **Email Appearance** section controls how those messages look:

* **Text Alignment** – Choose left or center alignment for the email content.
* **Font Family** – Pick a font for the email body. You can choose from system fonts or Google fonts.

These settings apply to all review request and reminder emails sent from your project. Your logo and primary color from Branding also appear in these emails.

{% hint style="info" %}
Emails that look professional and on-brand are more likely to be opened and acted on. Match your email appearance to your website and other marketing materials.
{% endhint %}

***

### Showcase Appearance (Settings > Showcase)

The Showcase is the public page where visitors see your reviews. The **Appearance** section under Showcase lets you set:

* **Font Family** – Choose a system font or Google font for the Showcase page. This affects the text for review titles, customer names, and review content.

Use this to match the Showcase to your website or brand style. Reviews, ratings, and testimonials on your Showcase help build trust with potential customers.

***

### Review Page Appearance (Review Pages)

Each review page has its own **Appearance** section. Open a review page, then click **Appearance** in the sidebar. You can customize:

* **Layout** – Choose a centered layout or a split-screen layout on wider devices.
* **Text Alignment** – Left or center alignment for the form and content.
* **Font Family** – A system or Google font for the review page.
* **Background Color** – The color behind the form.
* **Background Image** – An optional image displayed in the background.

If you have multiple review pages, each can have different appearance settings. This is useful when you want different locations or use cases to have distinct looks.

{% hint style="info" %}
Review page appearance affects the experience customers have when leaving feedback. A clean, branded form can encourage more complete reviews and better ratings.
{% endhint %}

***

### How Appearance Settings Work Together

Appearance settings flow through your project:

1. **Branding** (logo, icon, primary color) is used in emails, review pages, and widgets.
2. **Email appearance** controls the look of review request and reminder emails.
3. **Showcase appearance** controls the look of your public review page.
4. **Review page appearance** controls the look of each form where customers leave reviews.

When you update branding or appearance, the changes apply to new emails and visits. Existing emails already sent will keep their original look.

{% hint style="success" %}
Consistent appearance across emails, review pages, and your Showcase strengthens your brand and reputation. Customers and visitors see a cohesive experience from request to review to display.
{% endhint %}

***

### Tips

{% hint style="info" %}
Use the same primary color and font family across Branding, Email, and Review Pages for a unified look. Your reviews and feedback will feel more professional and trustworthy.
{% endhint %}

{% hint style="warning" %}
Each section (Branding, Meta, Email, Showcase, Review Page) has its own **Save** button. Click it after making changes to apply them.
{% endhint %}


# Members

Invite team members to help manage your project. Control who has access and what they can do with roles.

Members are people you invite to help manage your project. Each member has a role that determines what they can see and do. You can invite colleagues, contractors, or anyone who needs access, and you control exactly how much power they have.

### Where to Find Members

Go to **Settings** in the sidebar, then click **Members**. You’ll see everyone who has access to the current project. From here you can invite new members, change roles, adjust notification preferences, or remove someone from the project.

### Roles and What They Can Do

When you invite someone, you choose their role. Here’s what each role can do:

| Role            | View data | Send requests & reply to reviews | Change settings | Manage members |
| --------------- | --------- | -------------------------------- | --------------- | -------------- |
| **Owner**       | Yes       | Yes                              | Yes             | Yes            |
| **Super Admin** | Yes       | Yes                              | Yes             | Yes            |
| **Admin**       | Yes       | Yes                              | Yes             | Yes            |
| **Manager**     | Yes       | Yes                              | Yes             | Invite only    |
| **Operator**    | Yes       | Yes                              | No              | No             |
| **Viewer**      | Yes       | No                               | No              | No             |

**Owner.** There is one owner per space: the person who created it. They can view data, send review requests, reply to reviews, change settings, manage members, and delete the project. They have full control over the space and all its projects. Their role cannot be changed, and they cannot be removed.

**Super Admin.** Super Admin is an agency teammate role. You cannot assign it from **Settings** > **Members**. Invite Super Admins from **Agency** > **Team**. See [Inviting Team Members](/agencies/inviting-team-members). A Super Admin can view data, send review requests, reply to reviews, change settings, manage members, and delete a project. They cannot delete the space or access billing. Client members on an agency project do not see Super Admins on the Members list.

**Admin.** An Admin can view data, send review requests, reply to reviews, and change project settings. They can invite members, and they can edit or remove Managers, Operators, and Viewers. They cannot change or remove Owners, other Admins, or Super Admins. They cannot delete the project.

**Manager.** A Manager can view data, send review requests, reply to reviews, change project settings, and invite new members. They cannot edit or remove other members. This is the default role when you invite someone.

**Operator.** An Operator can view data, send review requests, and reply to reviews. They cannot change project settings or manage members. Use this for people who work with customers and reviews but should not change configuration.

**Viewer.** A Viewer can see customers, reviews, messages, and analytics. They cannot send requests, reply to reviews, change settings, or manage members. Use this for people who need to monitor performance without making changes.

{% hint style="info" %}
Each member has one role for the space. You choose which projects they can access. They keep that same role on every project you assign them.
{% endhint %}

### Inviting a Member

1. Go to **Settings** > **Members**.
2. Click **Invite Member**.
3. Enter their email address.
4. Choose a role (Admin, Manager, Operator, or Viewer). You cannot invite a Super Admin from this page. The Owner and Super Admins can assign any of these four roles. Admins and Managers can assign Manager, Operator, or Viewer.
5. Click **Invite Member**.

They’ll receive an email with a link to accept the invite. Once they join, they’ll see the project in their account and can start working based on their role.

{% hint style="warning" %}
Inviting members may require a plan upgrade. If the invite button is disabled or you see an upgrade message, check your plan limits.
{% endhint %}

### Editing a Member

Click a member’s tile to open their settings. You can:

* **Change their role.** The Owner and Super Admins can switch between Admin, Manager, Operator, and Viewer. Admins can switch people below them between Manager, Operator, and Viewer. You cannot change the role of an Owner or Super Admin from this page, and Admins cannot change other Admins.
* **Adjust notifications.** Choose which events they receive email notifications for (see Notifications below).
* **Remove from project.** Remove their access to this project. They’ll still have access to other projects they were invited to.

Members can also edit their own notification preferences. They’ll see an **Edit** button on their own tile.

### Notifications

When you click a member’s tile, a **Notifications** section appears in the edit modal. You can turn specific notification types on or off for that person:

* **New Reviews.** Sent when customers leave new reviews or ratings. Useful for staying on top of feedback and reputation.
* **Imports.** Sent when customer or review imports finish. Helps you know when bulk data has been added.
* **Sent Replies.** Sent when reviews are automatically replied to. Keeps you informed when automated responses go out.
* **Weekly Reports.** A summary of activity sent once per week. Good for a high level view of reviews, ratings, and engagement without daily emails.

Check the boxes for the notifications you want that member to receive, then click **Save**.

{% hint style="info" %}
Notification preferences are set per project. If a member has access to multiple projects, they can receive different notifications for each one.
{% endhint %}

{% hint style="success" %}
Turn off notifications you don’t need to reduce inbox clutter. For example, if you check the dashboard daily, you might disable Weekly Reports but keep New Reviews so you never miss fresh feedback.
{% endhint %}

### Resending an Invite

If someone hasn’t accepted their invite yet, you’ll see an “Invited” status on their tile. Click **Edit**, then **Resend Invite** to send the invitation email again.

### Removing a Member

To remove someone from the project:

1. Click their tile to open the edit modal.
2. Click **Remove from project**.
3. Confirm the action.

They’ll lose access to this project immediately. If they had access to other projects, those are unaffected. The Owner and Super Admins can remove Admins, Managers, Operators, and Viewers. They cannot remove an Owner or a Super Admin from a project. Admins can remove Managers, Operators, and Viewers. Managers cannot remove other members.


# Customers

View, filter, and manage your customers. Open customer profiles to edit details, send review requests, and view their messages and reviews.

The Customers page shows everyone you've imported into your project. You can search, filter, and sort the list, open a customer's profile to see their details and history, send review requests, and perform bulk actions. Customers are the people you send review requests to—bring them in via [Importing Customers](/importing/customers), then manage them here.

### Where to Find It

Click **Customers** in the sidebar. You'll see a table of all customers in your project. Click a row to open that customer's profile.

***

### The Customers Table

Each row shows one customer. You'll see their name, email, phone, company, when they were added, when they signed up, when they were last messaged, when they last left a review, their tags, and notes. Unsubscribed customers appear in red. Use the quick-action button on each row to **Request review**, see **Reviewed**, or **Requested review** (already sent).

***

### Filters

Use the toolbar to narrow what you see:

* **Search** – Search by name, email, phone, company, address, city, state, or postal code.
* **Date range** – Filter by when customers were added, signed up, messaged, or reviewed.
* **Location** – If you have multiple locations, filter to one or leave as "All".
* **Rating** – Filter by star rating (for example, only customers who left 5-star reviews).
* **Tag** – Show only customers with a specific tag.
* **Filter** – Choose a status: Review requested, Not requested, Missed (clicked but didn't review), Reviewed, Not reviewed, Has notes, Unsubscribed, or Archived.
* **Sort** – Sort by name, email, phone, company, date added, date signed up, date requested, date messaged, or date reviewed.

***

### Bulk Actions

Select one or more customers using the checkboxes. When you have rows selected, a **Select bulk action** menu appears. You can:

* **Request reviews** – Schedule a review request for all selected customers.
* **Edit customers** – Update details (such as tags or location) for all selected customers.
* **Unsubscribe customers** – Mark them as unsubscribed so they no longer receive messages.
* **Export** – Export the selected customers as a CSV. See [Exporting](/platform/exporting) for details.
* **Delete customers** – Permanently remove them from your project.

***

### Customer Profile

Click a customer row to open their profile. You'll see:

* **Header** – Name, company, email, phone, when they were last messaged. A ribbon shows **Archived** or **Unsubscribed** if applicable.
* **Notes** – Internal notes. Click the notes area to edit.
* **Tags** – Tags assigned to this customer.
* **Reviews** – Reviews this customer has left.
* **Messages** – All review requests and reminders sent to this customer.

#### Profile Actions

* **Edit customer** – Update name, email, phone, company, address, location, tags, signup date.
* **Request review** – Send a manual review request. Choose channel (email or SMS), reminders, and review page.
* **Add review** – Manually add a review for this customer.
* **Contact customer** – Open your email client to email them.
* **Cancel unsent messages** – Cancel any scheduled messages that haven't been sent yet.
* **Unsubscribe** or **Resubscribe** – Stop or resume sending messages to this customer.
* **Archive** or **Unarchive** – Archive hides them from the main list; unarchive brings them back.
* **Validate email** – Check if their email address is valid (for customers with email).
* **Delete customer** – Permanently remove them from your project.

{% hint style="info" %}
To add customers to your project, use **Add** on the Customers page or see [Importing Customers](/importing/customers) for CSV, integrations, BCC, and other methods.
{% endhint %}

{% hint style="info" %}
To export customers, select rows and choose **Export** from the bulk action menu, or use **Export All** in the pagination area. See [Exporting](/platform/exporting) for details.
{% endhint %}


# Reviews

View, filter, and manage your reviews. Open a review to reply, edit details, hide it from your showcase, or flag duplicates.

The Reviews page shows all feedback and testimonials from your customers. You can search, filter, and sort the list, open a review to see full details, reply to reviews (for Google and other integrations that support it), hide reviews from your showcase, and perform bulk actions. Reviews come from your review pages, imports, and integrations—see [Importing Reviews](/importing/reviews) to bring in existing reviews.

### Where to Find It

Click **Reviews** in the sidebar. You'll see a summary of ratings at the top, an overview chart, and a table of all reviews. Click a row to open that review.

***

### Rating Summary and Overview

At the top of the page, you'll see your average rating and a breakdown by star rating. Each rating is a link—click it to filter the table to that rating. Below that, an overview chart shows your review volume over time. Both update based on your current filters (location, source, tag, date range).

***

### The Reviews Table

Each row shows one review. You'll see the customer (or reviewer name), rating, source (Google, Facebook, your website, etc.), a snippet of the review text, **Sentiment**, and the date. Icons indicate whether the review is hidden, has a reply, or is flagged as a duplicate.

**Sentiment** is a meter that shows how positive or negative the written review text feels, scored separately from the star rating. Hover the meter to see the score out of 100. Empty meters mean the review has no written text or has not been scored yet. See [AI Tools](/platform/ai-tools) for more about Sentiment.

***

### Filters

Use the toolbar to narrow what you see:

* **Search** – Search across review content and customer names.
* **Date range** – Filter by when reviews were added, updated, or replied to.
* **Location** – If you have multiple locations, filter to one or leave as "All".
* **Rating** – Filter by star rating (for example, only 5-star reviews).
* **Source** – Show only reviews from a specific source (Google, Facebook, etc.).
* **Tag** – Show only reviews with a specific tag.
* **Filter** – Choose a type: Written reviews, Customer reviews (linked to a customer), Anonymous reviews, Native reviews (from your review page), Visible, Hidden, Duplicate, With replies, Without replies, or With highlights.
* **Sort** – Sort by date added, date updated, date replied, **Most Positive**, or **Most Negative** (by Sentiment score).

***

### Bulk Actions

Select one or more reviews using the checkboxes. When you have rows selected, a **Select bulk action** menu appears. You can:

* **Edit reviews** – Update details (source, location, tags, date) for all selected reviews.
* **Edit visibility** – Hide or show the selected reviews on your [Showcase](/platform/showcase) and widgets.
* **Export** – Export the selected reviews as a CSV. See [Exporting](/platform/exporting) for details.
* **Delete reviews** – Permanently remove them from your project.

***

### Review Detail

Click a review row to open it. You'll see:

* **Review** – The full rating and review text. You can edit the rating and text if needed.
* **Custom fields** – Any custom form fields and answers from your review page.
* **Reply** – For reviews from Google and other integrations that support replies, you can write and post a public reply. [AI Tools](/platform/ai-tools) can suggest replies.
* **Actions** – Hide from public, flag as duplicate, reply, or delete.
* **Reviewer** – The customer or guest who left the review. You can edit reviewer details for anonymous reviews.
* **Details** – Date, source, location, tags, and external link (for reviews from third-party sites).

#### Reply to Reviews

If a review came from an integration that supports public replies (such as Google My Business), you'll see a reply field. Write your reply and click Save to post it. The reply appears on the review site. You can use AI Tools to generate a suggested reply before editing and saving.

{% hint style="info" %}
To bring in reviews from Google, Facebook, or other sites, see [Importing Reviews](/importing/reviews). To reply to Google reviews, connect the [Google My Business integration](/platform/integrations).
{% endhint %}

{% hint style="info" %}
To export reviews, select rows and choose **Export** from the bulk action menu, or use **Export All** in the pagination area. See [Exporting](/platform/exporting) for details.
{% endhint %}

{% hint style="info" %}
Hidden reviews stay in your data but don't appear on your Showcase or in widgets. Use this for duplicate or off-topic reviews you don't want to display publicly.
{% endhint %}

***

### Duplicates

The same visit can create two rows: a rating on your review page, then a Google or Facebook review that syncs in later. MGR can treat those as the same person and keep one review.

That happens when:

* The customer was already in your project (for example they opened an email or SMS link) and their first name matches the name on the imported review. The imported review needs to arrive within about 30 minutes.
* They left an anonymous rating (no name), such as from a QR code or a [redirect](/platform/review-pages/redirects), and the imported review has the same rating, is for the same location, and arrives within about 5 minutes.

MGR keeps the imported review (the Google or Facebook one). The earlier review page rating is marked as a duplicate. Tags from that first rating, such as a waiter tag on a QR code, are copied to the imported review.

You can also flag or unflag a duplicate yourself from **Actions** on the review.

{% hint style="info" %}
Connect [Google My Business](/platform/integrations) so Google reviews sync automatically. Until they sync, you will only see the rating from your review page.
{% endhint %}


# Ratings

Choose stars or faces plus labels and colors for customer ratings and control how scores appear across review surfaces.

Ratings are the scores customers give when they leave reviews—typically 1 through 5. The Ratings settings let you customize how those scores look and feel across your project. You can choose stars or faces, change labels and colors, and upload custom icons so your ratings match your brand and build trust with customers.

### Where to Find Ratings Settings

Go to **Settings** in the sidebar, then click **Ratings**. You'll see two sections: one for the rating scale itself, and one for custom icons.

***

### Rating Labels

The **Labels** table shows all five ratings (1 through 5). For each one you can edit:

* **Label** – The text shown next to the rating. For example, you might use "Poor", "Fair", "Good", "Very Good", and "Excellent", or keep the default labels.
* **Color** – The color used for that rating. Pick colors that match your brand or help customers quickly tell positive from negative feedback.

Each row also shows a preview of the icon and score so you can see how it will look.

{% hint style="info" %}
Labels and colors appear on your review pages, in widgets, and on your Showcase. Consistent branding helps customers recognize your business and improves your reputation.
{% endhint %}

***

### Symbol: Stars or Faces

Choose how ratings are displayed:

* **Faces** – Smiley or frowney faces. Good for a friendly, approachable feel.
* **Stars** – Traditional star ratings. Familiar to most customers and common for reviews and feedback.

This setting applies everywhere ratings appear—on review pages, in your review list, on widgets, and on your Showcase.

***

### Rating Order (Faces Only)

When you use faces, you can choose the order they appear:

* **Worst to Best** – Lowest rating first (e.g., 1 on the left, 5 on the right).
* **Best to Worst** – Highest rating first (e.g., 5 on the left, 1 on the right).

This only affects the face display. Star ratings always show from lowest to highest.

***

### Custom Icons

You can replace the default icons with your own images for each rating (1 through 5). This lets you use custom graphics, emojis, or branded visuals that match your business.

**Requirements:**

* Maximum file size: 5MB
* Minimum dimension: 100px
* Maximum dimension: 500px

Upload an image for each rating you want to customize. The platform shows a preview so you can confirm it looks right. You can remove a custom icon anytime to go back to the default.

{% hint style="success" %}
Custom icons help your review forms stand out and feel more on-brand. They appear on review pages where customers leave feedback.
{% endhint %}

***

### Where Ratings Are Used

Your rating settings flow through your entire project:

* **Review pages** – Customers select a rating when leaving a review. The symbol (stars or faces), labels, colors, and custom icons all appear here.
* **Reviews list** – You can filter reviews by rating and see each review's score.
* **Widgets** – Embedded review displays use your rating settings to show scores.
* **Showcase** – Your public review page displays ratings using your chosen style.
* **Custom fields** – When you add custom fields to a review page, you can choose to show them only when certain ratings are selected. For example, show a feedback form for low ratings and a review form for high ratings.
* **Link revealer** – On review pages, you can set links to appear only when a customer selects a certain rating or higher.

***

### Tips

{% hint style="info" %}
Use clear, simple labels so customers understand what each rating means. This encourages more honest feedback and better reviews.
{% endhint %}

{% hint style="warning" %}
Click **Save** after changing labels, symbol, or rating order. Custom icons are saved automatically when you upload them.
{% endhint %}

{% hint style="success" %}
Ratings are central to your reputation. Customize them to match your brand and make it easy for customers to leave reviews and feedback.
{% endhint %}


# Messages

View and manage review requests and reminders sent to customers by email or SMS. Track delivery, opens, and clicks.

Messages are the emails and SMS you send to customers to request reviews. Every request and reminder from your project appears here. You can see what was sent, when it was scheduled or delivered, and whether customers opened or clicked through. Messages also appear on each customer's profile so you can see the full history for one person.

### Where to Find Messages

**Project view** – Click **Messages** in the sidebar. You'll see all messages across your project, with summary stats at the top and a filterable table below.

**Customer view** – Open a customer's profile and scroll to the **Messages** section. You'll see only that customer's messages, grouped by request or in a flat list.

***

### Project Messages Page

The project Messages page shows every review request and reminder sent from your project. At the top, you'll see four summary numbers: **Sent**, **Opened**, **Clicked**, and **Failed**. Each number is a link—click it to filter the table to that status.

#### Filters

Use the toolbar to narrow what you see:

* **Search** – Search by customer name or other text.
* **Location** – If you have multiple locations, filter to one or leave as "All".
* **Channel** – Email, SMS, or both.
* **Template** – Request, Reminder, Thanks (positive), or Thanks (negative).
* **Status** – Scheduled, Sent, Opened, Clicked, Failed, or Complained.
* **Sort** – By date sent, date scheduled, date opened, or date clicked.

#### The Table

Each row is one message. You'll see:

* **Customer** – Name and avatar. Click the row to go to that customer's profile.
* **Channel** – Email or SMS.
* **Template** – The type of message (request, reminder, thanks).
* **Scheduled / Sent** – When it was scheduled or when it was actually sent.
* **Sent** – Whether the message was delivered.
* **Opened** – Whether the customer opened it (email only).
* **Clicked** – Whether the customer clicked through to leave a review.
* **Failed** – Whether the message failed to send, with a reason if available.

Click a row to open the customer's profile. The page scrolls to that message so you can see it in context with their other messages and reviews.

#### Bulk Actions

Select one or more messages using the checkboxes. When you have messages selected, a **Select bulk action** menu appears. You can **Cancel unsent messages** for all selected rows. This only works for messages that haven't been sent yet.

{% hint style="info" %}
Messages are created automatically when your request strategy runs. To schedule messages for a customer, send them a review request from their profile. See [Request Strategy](/platform/request-strategy) for how requests are triggered.
{% endhint %}

***

### Customer Messages Section

On a customer's profile, the **Messages** section shows every message sent to that customer. If they have messages, you can switch between two views:

* **Grouped by request** – Messages are grouped by review request. Each group shows "Request #1", "Request #2", and so on, with the messages for that request listed below.
* **List** – A flat list of all messages in one table.

If the customer has no messages yet, you'll see a notice: *Request a review to schedule messages.* Send a manual request from the customer's page to get started.

#### Per-Message Actions

Each message row has an **Actions** menu. What you can do depends on the message status:

* **Cancel message** – For unsent messages only. Stops the message from being sent. You can optionally cancel all unsent messages in that request.
* **Reschedule message** – For canceled messages only. Pick a new date and time to send it.
* **Copy UUID** – Copy the message identifier to your clipboard.
* **Delete message** – Remove the message from the list. This does not undo a sent message; it only removes the record from your view.

{% hint style="warning" %}
Deleting a message is permanent. Use cancel or reschedule if you want to change when a message goes out instead.
{% endhint %}

#### Canceled Messages

When a message is canceled, it stays in the message history. It is not deleted and does not disappear from the list.

On a customer's profile, canceled rows are easy to spot:

* The entire row appears **faded**
* The **Scheduled / Sent** column shows a ban icon, the original date, and the word **canceled**
* The **Sent**, **Opened**, **Clicked**, and **Failed** columns stay empty, because the message was never delivered

This is what you will see when MGR automatically cancels pending reminders after a customer opens your review page or leaves a review. You can also cancel messages yourself from the **Actions** menu.

On the project **Messages** page, canceled messages remain in the table but do not show a distinct canceled label. To find them, open the date range filter and choose **Date Canceled** as the date type. The summary stats at the top (Sent, Opened, Clicked, Failed) do not include canceled messages.

***

### Message Statuses

| Status         | Meaning                                                                                                                                                        |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Scheduled**  | The message is queued and will be sent at the scheduled time.                                                                                                  |
| **Sent**       | The message was delivered.                                                                                                                                     |
| **Opened**     | The customer opened the email (email only).                                                                                                                    |
| **Clicked**    | The customer clicked the link to leave a review.                                                                                                               |
| **Failed**     | The message could not be delivered. A reason may be shown.                                                                                                     |
| **Complained** | The customer marked the message as spam or complained.                                                                                                         |
| **Canceled**   | The message was scheduled but will not be sent. Visible on customer profiles as a faded row with a **canceled** label. You can reschedule it from **Actions**. |

***

### How Open and Click Tracking Works

MGR tracks two things after a message goes out: whether the customer **opened** it and whether they **clicked** the link to leave a review. Tracking is always on. There is nothing to set up or turn on.

#### Open Tracking

Open tracking works for email only. SMS messages cannot be tracked for opens.

Each email includes a tiny invisible image. When the customer's email app loads that image, MGR records the message as **Opened**. A message is only marked opened the first time. Later opens do not change the count.

Because open tracking relies on that image, the numbers are a close estimate rather than an exact count:

* If a customer's email app blocks images, their open may not be counted even though they read the message.
* Some email apps load images automatically or scan messages before delivery. To avoid counting those as real opens, MGR ignores any open that happens within 3 seconds of the message being delivered.

#### Click Tracking

Click tracking works for both email and SMS. The review link in every message is unique to that message. When the customer taps or clicks it, MGR records the message as **Clicked** and then sends them straight to your review page (or your custom link, if you set one on the template).

* A message is only marked clicked the first time. Later clicks do not change the count.
* Automated security and spam scanners sometimes open links before the customer does. MGR ignores these so your click numbers stay accurate. It also ignores any click that happens within 5 seconds of the message being delivered.
* A click also counts as an open, since the customer had to open the message to click the link.

{% hint style="info" %}
Because a click is your strongest signal that a customer is leaving a review, MGR automatically cancels any pending reminders for that customer once they click. There is no reason to keep nudging someone who already followed through.
{% endhint %}

***

### Tips

{% hint style="info" %}
Use the **Clicked** stat and filter to see which messages led to reviews. These are your most effective messages.
{% endhint %}

{% hint style="success" %}
If a message failed, check the failure reason. Common causes include invalid email addresses, unsubscribed customers, or SMS delivery issues. Fix the underlying issue (e.g., update the customer's contact info) before resending.
{% endhint %}

{% hint style="info" %}
When a customer opens your review page or leaves a review, pending reminders are canceled automatically. On their profile, those messages stay in the list as faded rows labeled **canceled**. See [Request Strategy](/platform/request-strategy) for the full picture.
{% endhint %}


# Locations

Add locations for multi-site brands, link review pages, and filter reviews plus feedback by store or branch.

Locations let you manage multiple stores, branches, or sites within a single project. Each location can have its own review page, address, and link. Reviews, messages, and Analytics can be filtered by location so you can see performance for each one. Locations are useful for businesses with more than one physical location—restaurants, retail chains, service areas, and more.

### Where to Find Locations

Go to **Settings** in the sidebar, then click **Locations**. You'll see a list of your locations. If you don't have any yet, you'll see a notice with a button to create your first one.

{% hint style="info" %}
Your plan includes a location limit (Business is priced per location, Agency includes 5 with optional extras). If you can't add another location, upgrade on the billing page or remove one you no longer need.
{% endhint %}

***

### Creating a Location

1. Click **Add** (or **Create location** if you have none).
2. Enter a **Name** for the location (e.g., "Downtown Store" or "Main Office"). This is required.
3. Click **Create**.

Your new location appears in the list. Click it to edit and add more details.

***

### Editing a Location

Click a location or its **Edit** button to open the edit modal. You can configure:

#### Settings

* **Name** – The internal name for the location. Used in filters and Analytics.
* **Display name** – Optional. A different name shown to customers (e.g., on the review form). If left blank, the name is used.
* **Slug** – A short identifier used in URLs. For example, a slug of `downtown` makes the review link `yoursite.com/review?location=downtown`. Slugs are usually auto-generated from the name but you can change them. Each slug must be unique within the project.
* **Store code** – Optional. A code, SKU, or identifier for the location (e.g., "STORE-001"). Useful for reporting or integrations.
* **Review page** – Which review page this location uses. Customers directed to this location will see that page. A location can only be assigned to one review page.

#### Address

Expand the **Address** section to add the location's physical address:

* Address line 1 and 2
* City
* State or region
* Postal code

The address is used in email templates (e.g., the `{{location_address}}` placeholder) and can help with integrations.

#### Logo

Expand the **Logo** section to upload a logo for this location. The logo appears at the top of the review page and kiosk page when customers visit with this location selected (for example, through a location-specific link or the location picker).

* Upload an image (max 5MB, between 100px and 2000px in both width and height).
* The logo saves automatically when you upload or remove it. You do not need to click **Save**.
* If you do not upload a location logo, customers see your project logo from **Settings > Appearance** instead.
* Logo height is controlled by **Logo Height** in your project's appearance settings.

{% hint style="info" %}
Use location logos when each store or branch has its own branding. A location-specific review link or kiosk display will show that location's logo instead of your main project logo.
{% endhint %}

#### Integrations

If the location is connected to an integration (such as Google My Business), you'll see it listed here. Integrations are set up elsewhere; this section is informational.

When you're done, click **Save**. To remove a location, click **Delete** in the footer. You'll be asked to confirm.

{% hint style="warning" %}
Deleting a location is permanent. Reviews and messages already tied to that location will keep the association, but you won't be able to assign new data to it.
{% endhint %}

***

### How Locations Are Used

Once you have locations, they appear throughout the project:

#### Review Pages

In each review page's settings, you can **assign locations** to that page. A location can only use one review page. If a location isn't assigned to any page, it uses the default review page.

You can also enable a **Location picker** on a review page. When enabled, customers see a dropdown to choose which location they're reviewing. This is useful when one review page serves multiple locations (e.g., a shared link). If the link includes `?location=slug`, that location is pre-selected.

#### Review Links

Add `?location=slug` to your review page URL to send customers directly to a specific location. For example:

`yoursite.com/review?location=downtown`

Any review submitted from that link is attributed to the Downtown location.

#### Manual Review Requests

When you request a review from a customer's profile, you can choose a **Location** in the options. The review link in the message will point to that location.

#### Dashboard and Analytics

On the dashboard and on [Analytics](/platform/projects/analytics), you can filter by location to see ratings, review volume, and outreach for that store or branch. The same filter appears on the Messages page, Reviews page, and elsewhere, so you can focus on a single location or compare them.

#### Showcase

You can limit your public Showcase to specific locations. That way, visitors see only reviews for the locations you choose.

#### QR Codes

When generating a QR code for a review page, you can select a location. The QR code will link to that location's review page, so you can place different codes at different stores.

***

### Tips

{% hint style="info" %}
Use clear, consistent names for locations. If you have many, consider a naming pattern (e.g., "City - Street" or "Region #1") to keep things organized.
{% endhint %}

{% hint style="info" %}
The slug appears in URLs. Keep it short and readable—customers may see it. Use lowercase letters and hyphens (e.g., `main-street`).
{% endhint %}

{% hint style="success" %}
Assign each location to the review page that fits it best. You might use different pages for different regions, services, or languages.
{% endhint %}

{% hint style="info" %}
If you have one review page for many locations, enable the Location picker so customers can choose where they're leaving feedback. Use location-specific links (`?location=slug`) when you know the location in advance—for example, in receipts or in-store signage.
{% endhint %}


# Sources

Organize reviews by where they came from—Google, Facebook, Yelp, and more. Filter, display, and analyze reviews by source.

Sources let you label where reviews come from—such as Google, Facebook, Yelp, or your own website—so you can categorize, filter, and display them more effectively. Each source has a name, color, and icon that appear when you show reviews in widgets or on your showcase.

### Where to Find Sources

Go to **Settings** in the sidebar, then click **Sources**. You'll see all your sources as tiles. If you have none yet, you'll see a notice inviting you to create your first source.

### Creating a Source

1. On the Sources settings page, click **Add** (or **Create Source** if you have no sources yet).
2. Enter a **Name** for the source (for example, Google, Facebook, Yelp, or Website).
3. Click **Create**.

Your new source appears in the list. The platform automatically generates a short identifier (slug) from the name. You can edit the source to change the name, slug, color, and icon.

### Editing a Source

1. Click a source tile to open the edit modal.
2. Change the **Name** or **Slug** as needed.
3. Pick a **Color** for the source badge.
4. Choose an **Icon**—either upload your own image or select from the preset icons.
5. Click **Save**.

{% hint style="info" %}
Preset icons you choose under **Select Icon** already match what MGR expects. If you upload a custom image instead, that image replaces the preset icon. If saving fails with a message about Font Awesome icons, or an automation supplies icon text for you, use two lowercase words separated by one space (for example **fab fa-google** or **fas fa-star**).
{% endhint %}

{% hint style="info" %}
The slug is used when filtering reviews on your website or in widgets. If you change it, any existing links or filters that use the old slug will need to be updated.
{% endhint %}

### Deleting a Source

1. Open the source by clicking its tile.
2. Click **Delete** in the modal.
3. Confirm the deletion.

Reviews that were assigned to that source will no longer show a source. The source is removed from your project.

{% hint style="warning" %}
Deleting a source is permanent. Reviews keep their content and ratings, but they will no longer be tagged with that source.
{% endhint %}

### Assigning Sources to Reviews

You can add or change the source on any review:

1. Go to **Reviews** and open a review.
2. In the **Details** section, use the **Source** field to select a source (or None).
3. Click **Save**.

### Filtering by Source

**Reviews** – Use the source dropdown in the Reviews toolbar to show only reviews from a specific source.

**Dashboard** – The recent reviews table shows the source for each review. Use the Reviews page filters for more options.

**Widgets** – When building a widget, use the **Sources** filter (under Filters) to show only reviews from certain sources. You can also choose whether to show the source badge on each review and where it appears (Layout > Source, Source Position).

**Showcase** – In Settings > Showcase > Filters, you can limit which reviews appear on your showcase by selecting one or more sources.

### Where Sources Appear

When you enable the source display in a widget or showcase, each review shows a small badge with the source name and icon—for example, a Google logo or a star. This helps visitors see where each review came from and adds credibility. You can place the source next to the avatar or in the footer of each review, depending on the widget type.

{% hint style="success" %}
Create sources before you start collecting reviews. If you use integrations like Facebook, the platform can automatically assign the correct source when reviews are synced.
{% endhint %}


# Tags

Organize reviews and customers with tags, and use AI to automatically tag reviews based on their content.

Tags help you organize reviews and customers so you can filter, analyze, and display them more effectively. You can create tags manually, assign them to reviews when editing, and use AI to automatically tag reviews based on their content.

### Where to Find Tags

Go to **Settings** in the sidebar, then click **Tags**. You'll see your tags organized by tabs: All, Tags for Reviews, Tags for Customers, and AI Tags (tags that use AI to apply themselves). You can also manage AI Tags from **Settings → AI Tools**.

### Creating a Tag

1. On the Tags settings page, click **Add** (or **Create Tag** if you have no tags yet).
2. Enter a **Name** for the tag.
3. Choose whether the tag is for **Reviews** or **Customers**.
4. Pick a **Color** and **Icon** so the tag is easy to spot.
5. Click **Create**.

Your new tag appears in the list. You can edit or delete it anytime by clicking the tag tile.

{% hint style="info" %}
Icons on this screen come from MGR's picker, so you normally only choose an icon and save. If saving fails with a message about Font Awesome icons, or an automation fills in icon text for you, use exactly two lowercase words separated by one space. Brand logos often look like **fab fa-google**. Solid symbols often look like **fas fa-star**. Names such as **fa-solid fa-star** are not accepted.
{% endhint %}

### AI Tagging

For review tags, you can turn on AI Tagging so the platform automatically applies the tag when a review matches your instructions.

1. Create or edit a **review** tag in **Settings → Tags**, or create one from **Settings → AI Tools → AI Tags**.
2. In the **AI Tagging** section, turn on the toggle (from AI Tools, AI Tagging is already on).
3. In **Instructions**, describe when the tag should apply. For example: *Apply to reviews that mention wait times, slow service, or delays.*
4. Optionally check **Automatically apply tag to existing reviews** to run the AI on your current reviews right away.
5. Click **Save** or **Create**.

New reviews are processed automatically every few minutes. If you enabled the option to apply to existing reviews, those will be tagged shortly after you save.

{% hint style="info" %}
AI Tagging only runs on reviews that have enough text. Very short reviews may not be tagged.
{% endhint %}

{% hint style="warning" %}
AI Tagging is included on **Business** and **Agency**. If it's not available, upgrade your plan.
{% endhint %}

### Assigning Tags Manually

You can add or remove tags on any review:

1. Go to **Reviews** and open a review.
2. In the **Details** section, use the **Tags** field to select or remove tags.
3. Click **Save**.

### Filtering by Tag

**Reviews** – Use the tag dropdown in the Reviews toolbar to show only reviews with a specific tag.

**Widgets** – When building a widget, use the **Tags** filter to show only reviews that have certain tags.

**Showcase** – In Settings > Showcase > Filters, you can limit which reviews appear on your showcase by selecting one or more tags.

**Zapier** – In the More Good Reviews app on Zapier, tag fields only list tags that match the step. Steps that work with customers use your customer tags. Steps that work with reviews use your review tags.


# Signatures

Add review-request links to signatures with multiple layouts per project so recipients tap a rating and leave feedback from email.

The signature feature adds a clickable rating strip to your email signature. When you send emails—to customers, clients, or anyone—recipients see faces or stars they can tap. Each tap takes them to your review page with that rating pre-selected, so they can leave feedback in one click. It's a passive way to collect reviews, ratings, and feedback without sending dedicated review requests.

### Where to Find Signatures

Go to **Settings** in the sidebar, then click **Signatures**. You'll see all signatures for the current project. If you don't have any yet, you'll see a prompt to create your first one.

{% hint style="info" %}
You can create multiple signatures per project. Each signature has its own name, layout, and settings—useful when different team members or departments need different versions, or when you want one for general feedback and another for specific locations or review pages.
{% endhint %}

***

### Creating a Signature

Click **Create signature** (or **Add** if you already have signatures). A dialog opens with two main areas: settings on the left and a live preview on the right.

**Name** – Give the signature a name so you can tell it apart from others (for example, "Sales team" or "Downtown location").

**Layout** – Choose from five layouts. Each shows your ratings as clickable icons—either faces or stars—with labels:

* **Faces 1** – Faces in a horizontal row, with "best" and "worst" labels beneath them.
* **Faces 2** – Faces in a horizontal row, with each rating label to the right of its face.
* **Faces 3** – Faces in a vertical column, with each rating label to the right of its face.
* **Stars 1** – Stars in a horizontal row, with "best" and "worst" labels beneath them.
* **Stars 2** – Stars in a horizontal row, with each rating label to the right of its star.

**Body** – The text that appears above the rating icons. Use it to invite recipients to leave feedback (e.g., "How was your experience? Tap a face to let us know.").

**Options** – If you have multiple review pages, choose which one the signature links to. You can also tie the signature to a specific location or tags.

**Rating** – Set the icon size (20–30px) and whether ratings appear from worst to best or best to worst.

**Font** – Choose a sans serif or serif font, and set the body and label font sizes (11–15px).

**Colors** – Set the text color and the link color (the clickable rating icons). By default, the link color uses your project's primary color.

As you change settings, the preview updates in real time. When you're happy with it, click **Create** to save the signature.

***

### Editing a Signature

On the Signatures page, each signature appears as a tile showing its name and a short preview of the body text. Click a tile (or its **Edit** button) to open the edit dialog.

The edit dialog works like the create dialog: adjust any settings on the left and see the preview update on the right. Click **Save** when you're done.

{% hint style="success" %}
Use **Copy signature** for most email programs (Gmail, Outlook, Apple Mail, etc.). The formatting and links will be preserved when you paste. Use **Copy source code** if your email program supports pasting HTML or if you need to edit the markup.
{% endhint %}

***

### Deleting a Signature

From the edit dialog, click **Delete**. A confirmation dialog appears. Confirm to remove the signature permanently. Anyone who has already copied it can still use it, but it will no longer appear in your project's list.

***

### Copying and Using the Signature

Both the create and edit dialogs include copy buttons at the top:

* **Copy source code** – Copies the raw markup. Use this if your email program supports pasting HTML or if you need to edit the markup.
* **Copy signature** – Copies the formatted signature so you can paste it directly into your email program. Most users should use this option.

After copying, open your email program's signature settings and paste. The signature will appear at the bottom of every email you send. Recipients who tap a face or star will be taken to your review page to leave feedback.

***

### Tips

{% hint style="info" %}
The signature works best when your body text is short and inviting. Something like "How did we do? Tap a face to share your feedback" encourages action without cluttering the signature.
{% endhint %}

{% hint style="info" %}
Match the link color to your brand or project primary color so the rating icons stand out and feel consistent with your other communications.
{% endhint %}

{% hint style="success" %}
Signatures are ideal for businesses that send a lot of transactional or follow-up emails—appointments, invoices, delivery confirmations. Every email becomes a chance to collect reviews and build your reputation.
{% endhint %}

{% hint style="warning" %}
Some email programs strip formatting when pasting. If your signature doesn't look right or the links don't work, try **Copy source code** and paste into a program that supports HTML signatures, or check your email provider's signature help.
{% endhint %}


# Email Settings

Tune email templates for review requests and reminders including subjects, body copy, sender details, and visual styling.

Email settings control how your project sends review requests and reminders to customers. You can customize the message content, who the emails come from, and how they look. These settings apply to all emails sent from your project—including requests, reminders, and thank-you messages.

### Where to Find Email Settings

Go to **Settings** in the sidebar, then click **Email**. You'll see four sections: **Templates**, **Review Link**, **Appearance**, and **Settings**. Each section has its own **Save** button, so remember to click it after making changes.

***

### Templates

Templates are the actual messages your customers receive. Each template has a purpose:

* **Request** – The first email asking a customer to leave a review.
* **Reminder** – Follow-up emails sent when a customer hasn't responded yet. You can have up to three reminders, depending on your [Request Strategy](/platform/request-strategy).
* **Thanks (positive)** – Sent when a customer leaves a positive rating.
* **Thanks (negative)** – Sent when a customer leaves a negative rating.

#### Editing a Template

1. Use the dropdown at the top to select which template you want to edit.
2. Edit the **Subject** line (for email templates).
3. Edit the **Body** of the message. You can use placeholders that get replaced with real data—for example, the customer's first name, your business name, or the link to leave a review.
4. Click **Save** to apply your changes.

{% hint style="info" %}
Placeholders like `{{first_name}}` and `{{project_name}}` are replaced automatically when the email is sent. Use them to personalize your messages and improve response rates.
{% endhint %}

#### Previewing and Testing

Click **Preview** to see how the email will look on desktop or mobile. You can switch between desktop and mobile views in the preview window.

To send a test email, expand **Send test** in the preview window, enter one or more email addresses (separated by commas), and click **Send**. Test emails can only be sent to project members—this helps prevent accidental sends to real customers.

{% hint style="success" %}
Send yourself a test before turning on automatic review collection. That way you can confirm the message looks right and the link works.
{% endhint %}

***

### Review Link

The **Review Link** section controls how customers respond when they receive a review request or reminder email. You choose whether they see a row of ratings to tap or a single button, and where that link takes them. These settings apply to all request and reminder templates at once—so you can keep your emails consistent without editing each template separately.

#### Link style

Choose how the main link appears in your review request and reminder emails:

* **Rating selector** – Customers see a row of stars (or other rating symbols) to tap or click. Each option links directly to your review page with that rating pre-selected. This works well when you want customers to choose a rating before they land on the form.
* **Button** – Customers see a single button with custom text. Use this when you prefer a cleaner look or want to emphasize one clear action.

{% hint style="info" %}
The rating selector shows your configured ratings (stars, faces, or custom symbols) from your [Review Pages](/platform/review-pages) settings. The button gives you more control over the label and where it links.
{% endhint %}

#### Button Label (Button Only)

When you choose **Button**, you can customize the text that appears on it. For example: "Leave a Review", "Share Your Feedback", or "Rate Your Experience". Keep it short and action-oriented so customers know what to expect when they click.

#### Link for Button (Button Only)

When you use a button, you choose where it sends customers:

* **Review page** – The button links to your project's review page, where customers can select a rating and leave a review or feedback. This is the default and works for most businesses collecting reviews and ratings.
* **Custom URL** – The button links to a third-party review site or another allowed web address. Use this when you want to send customers directly to a platform where you collect reviews (for example, Google, Yelp, or Trustpilot) instead of your built-in review form.

If you choose **Custom URL**, a field appears where you enter the full web address (for example, `https://g.page/your-business/review`). The link must start with `https://` and use an allowed domain. Major review platforms are supported, including Google, Yelp, Facebook, Trustpilot, Tripadvisor, and BBB. Your project's [custom domain](/platform/adding-your-domain) also works when it is verified and active.

{% hint style="warning" %}
If the web address uses a domain that is not allowed, **Save** will fail with a message that the custom URL must use an allowed review site domain. Choose **Review page** instead if you want customers to use your built-in review form.
{% endhint %}

{% hint style="info" %}
When using a custom URL, the link is the same for every customer. You cannot personalize it per customer. Clicks are still tracked so you can see who opened and clicked in your [Messages](/platform/projects/messages) view.
{% endhint %}

{% hint style="success" %}
A clear review link improves click-through rates. Test both the rating selector and button to see which performs better for your audience and reputation goals.
{% endhint %}

***

### Settings

The **Settings** section controls who your emails come from and what appears at the bottom of each message.

* **Sender name** – The name customers see in their inbox (e.g., "Sarah from Acme Coffee"). Use a real person's name to build trust.
* **Sender email address** – The email address that appears as the sender. You can choose to send from your root domain (e.g., `reviews@yourdomain.com`) or a subdomain (e.g., `reviews@reviews.yourdomain.com`). To customize this, you must first add a [sending domain](/platform/adding-your-domain).
* **Reply-to** – Where replies from customers go. Enter one or more email addresses, separated by commas (e.g., `support@yourdomain.com`).
* **Footer** – Optional text or links that appear at the bottom of every email. You can use placeholders like `{{project_name}}` and `{{current_year}}`.
* **Unsubscribe text** – The text shown for customers who want to stop receiving messages. This is required for compliance.
* **List-Unsubscribe headers** – Choose whether to include standard unsubscribe headers that help email clients show an unsubscribe option. Including them can improve deliverability.

{% hint style="warning" %}
If you haven't added a sending domain, the sender email address will use the default domain and you won't be able to change it. Add your domain in **Settings > Domain** first.
{% endhint %}

***

### Appearance

The **Appearance** section controls the visual style of your emails:

* **Text alignment** – Left or center alignment for the email content.
* **Font family** – The font used in the email body. Choose from system fonts or Google fonts.

These settings apply to all review request and reminder emails. Your logo and primary color from [Appearance](/platform/projects/appearance) branding also appear in these emails.

{% hint style="info" %}
Emails that look professional and on-brand are more likely to be opened and acted on. Match your email appearance to your website and other marketing materials.
{% endhint %}

***

### How It All Works Together

1. **Templates** define what you say—the subject and body for each type of message.
2. **Review Link** defines how customers respond—rating selector or button, and where the link goes.
3. **Settings** define who the email comes from and what appears in the footer.
4. **Appearance** defines how the email looks—alignment and fonts.

When you update any of these, the changes apply to new emails only. Messages already sent or scheduled keep their original content and look.

***

### Tips

{% hint style="info" %}
Keep your subject lines short and personal. Including the customer's name or a clear benefit (e.g., "Quick favor, {{first\_name}}") can improve open rates and reviews.
{% endhint %}

{% hint style="info" %}
Use the same sender name and branding across all your customer communications. Consistency builds trust and helps your reputation.
{% endhint %}

{% hint style="success" %}
Review your templates before enabling automatic review collection. The dashboard will prompt you to preview your email templates when you're ready to automate.
{% endhint %}


# SMS Settings

Customize SMS templates for review requests and text reminders with tailored wording per automated touchpoint.

SMS settings control the text messages your project sends to customers when requesting reviews. You can customize the message content for each type of SMS (requests, reminders, and thank-you messages). SMS is included on **Business** and **Agency** plans. You still need to connect an SMS provider before you can send messages.

### Where to Find SMS Settings

Go to **Settings** in the sidebar, then click **SMS**. You'll see the **Templates** section. If SMS is locked, your current plan may not include it. Upgrade to **Business** or **Agency**, or contact support.

{% hint style="info" %}
Before you can send SMS, you must connect an SMS provider. MGR supports [Twilio](https://github.com/moregoodreviews/mgr-docs/tree/main/platform/sms/sms-with-twilio.md), [SimpleTexting](https://github.com/moregoodreviews/mgr-docs/tree/main/platform/sms/sms-with-simpletexting.md), [ClickSend](https://github.com/moregoodreviews/mgr-docs/tree/main/platform/sms/sms-with-clicksend.md), and [TextLink](https://github.com/moregoodreviews/mgr-docs/tree/main/platform/sms/sms-with-textlink.md). Set up your integration in **Settings > Integrations**.
{% endhint %}

{% hint style="warning" %}
Get permission before you text anyone. MGR handles STOP replies. It does not collect consent for you. See [SMS Consent](/sms/sms-consent).
{% endhint %}

***

### Templates

SMS templates are the text messages your customers receive. Each template has a purpose:

* **Request** – The first message asking a customer to leave a review.
* **Reminder** – Follow-up messages sent when a customer hasn't responded yet. You can have up to three reminders, depending on your [Request Strategy](/platform/request-strategy).
* **Thanks (positive)** – Sent when a customer leaves a positive rating.
* **Thanks (negative)** – Sent when a customer leaves a negative rating.

#### Editing a Template

1. Use the dropdown at the top to select which template you want to edit.
2. Edit the **Body** of the message. SMS messages are plain text—no subject line or formatting. You can use placeholders that get replaced with real data—for example, the customer's first name, your business name, or the link to leave a review.
3. Click **Save** to apply your changes.

{% hint style="info" %}
Placeholders like `{{first_name}}` and `{{project_name}}` are replaced automatically when the message is sent. Use them to personalize your texts and improve response rates.
{% endhint %}

{% hint style="warning" %}
SMS messages have character limits. Keep your messages short—a single standard SMS is 160 characters. Longer messages may be split into multiple segments and can cost more depending on your provider.
{% endhint %}

***

### How SMS Works With Your Strategy

SMS templates are used when your [Request Strategy](/platform/request-strategy) is set to send via **SMS** or **both Email and SMS**. In the strategy:

* **Channels** – Choose SMS (or both) to enable SMS for your project.
* **Reminders** – You can exclude SMS from reminders if you prefer to send reminders by email only.
* **Throttles** – Set daily and monthly limits for SMS requests to control volume and costs.

{% hint style="success" %}
SMS can be more effective than email for reaching customers quickly. Many people open text messages within minutes. Combine SMS with email for the best results—customers who don't respond to email may respond to a text.
{% endhint %}

***

### Tips

{% hint style="info" %}
Keep SMS messages brief and direct. Include the customer's name and a clear call-to-action. Short, personal messages tend to get replies.
{% endhint %}

{% hint style="info" %}
When using both email and SMS, you can use different wording for each channel. SMS templates are separate from email templates—customize them for the shorter format.
{% endhint %}

{% hint style="success" %}
Review your SMS templates before enabling SMS in your request strategy. Make sure the review link placeholder is included so customers can tap through to leave feedback.
{% endhint %}


# Analytics

Track review volume, ratings, replies, sources, tags, and outreach from one Analytics page.

Analytics shows how your review program and reputation are doing over time. Cards update together from the same location, source, period, and interval so you can compare them at a glance.

### Where to Find Analytics

Click **Analytics** in the sidebar. You will see a grid of cards for ratings, volume, replies, sources, tags, outreach, and more.

A compact version of the same cards also appears on your **Dashboard**. Use the filters there, then click **View All** to open the full Analytics page with those filters applied.

### The First Time You Open It

The first time someone opens Analytics or the dashboard cards for a project, you may see a banner that says **Building your analytics…**. Give it a short time. When it finishes, the banner says **Analytics are ready.** and the cards fill in.

If the project has no reviews, messages, or customers yet, you will see empty cards right away and no building banner.

{% hint style="info" %}
Later visits load right away. New reviews and messages show up on the next refresh, usually within a few minutes.
{% endhint %}

### Filtering Your Data

The toolbar at the top applies to the cards on the page:

1. **Location** – If you have multiple locations, choose one to see data for that location only. Leave it as All to see every location.
2. **Source** – Choose a source to see review cards for that source only. Leave it as All to see every source. Tags, Customers, Messages, and Requests do not change when you filter by source.
3. **Period** – Choose how far back to look. Last 4 weeks, 3 months, 6 months, 12 months, or 2 years. Or use month to date, quarter to date, or year to date. The page starts on the last 12 months. The Dashboard starts on the last 3 months, weekly.
4. **Interval** – Choose how time-series cards group data, weekly or monthly. The page starts on monthly, which is easier to read for longer periods.

Click **Clear** to reset the filters.

{% hint style="info" %}
Change a filter and the cards refresh together, so the numbers stay comparable.
{% endhint %}

### Rearranging Cards

1. Click **Edit** on the right side of the toolbar.
2. Drag a card to a new place.
3. Click **Done** to save.

The order is saved for you on this project. You cannot add or remove cards yet.

### What Each Card Shows

**Average Review** – The average star rating in the selected range, with a chart and the change versus the prior period.

**Review Volume** – How many reviews you received, with a chart and the change versus the prior period.

**Reviews per Week** – Average reviews received per week. Use this to compare a short period with a long one.

**Reply Coverage** – The percent of reviews that have a reply.

**Ratings Breakdown** – Review counts over time by star rating, from 5 stars down to 1 star.

**Sentiment** – A breakdown of written reviews scored as positive, neutral, or negative. Star rating and sentiment can differ when the text does not match the stars.

**Sources** – Review count and average rating by source (Google, Facebook, native reviews, and others). Click a row to open those reviews. This card hides when you have already filtered to a single source.

**Tags** – The most-used tags in the range, with review count and average rating. Click a tag to open matching reviews. This card is empty if no reviews in the range are tagged.

**Location Leaderboard** – Review count, average rating, and **5-Star %** for each location. This card hides when you have only one location or when you have already filtered to a single location.

**Needs Attention** – 1 and 2 star reviews from the last 3 months that do not have a reply. Older unanswered reviews stay out of this list. Click a row to open the review, or use **View All** to open reviews without replies from the same window, lowest rating first.

**Customers** – Customers added to your list, and customers who were first asked for a review. Use **View All** to open your customer list.

**Messages** – Messages sent, clicked, and failed over time. Use **View All** to open your messages.

**Requests** – Review requests sent by email and SMS today and this month. If a limit is set, you will see how much of that cap you have used. Period and interval do not change this card. Location does. If you can edit project settings, click a limit to change it in Settings. Use **View All** to open your messages.

### Comparing Periods

Cards that show a change compare the selected period with the matching prior period. Rolling ranges (last 4 weeks, 3 months, 6 months, 12 months, 2 years) compare with the same length of time just before. Month, quarter, and year to date compare with the same slice of the previous month, quarter, or year.

### Hovering for Details

Hover over a point on a time-series chart to see the date and value. On larger charts, the legend shows each series total. Click a legend item to show or hide that series.

{% hint style="info" %}
For longer periods (12 months or more), use the monthly interval to keep charts readable. For the last 4 weeks or 3 months, weekly works well.
{% endhint %}

### Google Analytics for Review Pages

If you want to track visits to your review pages in Google Analytics, go to **Settings** and enter your Google Analytics measurement ID (for example, G-XXXXXXXXXX) in the Basic section. This is separate from the Analytics page and lets you see review page traffic in your Google Analytics account.


# Webhooks

Add webhooks to your project to receive events about reviews and messages.

Webhooks notify your systems when something happens in your project—for example, when a customer leaves a review or when a message is sent. You provide a URL, and the platform sends the relevant data to that URL as soon as the event occurs. This lets you sync reviews and messages with your own tools, dashboards, or workflows.

### Where to Find Webhooks

Go to **Settings** in the sidebar, then click **API**. Scroll to the **Webhooks** section. You can add one or more webhook URLs there. Each webhook receives all events for your project unless you choose to filter by event type.

### Adding a Webhook

1. In Settings > API, scroll to the Webhooks section.
2. Click **Create Webhook** (or **Add** if you already have webhooks).
3. Enter the full URL where you want to receive events. It must start with `https://`.
4. Click **Create**.

Your webhook is active immediately. You can turn it on or off anytime using the switch next to its URL. When a webhook is off, no events are sent to that URL.

### Event Types

Each webhook sends a notification when one of these events occurs:

| Event               | When it fires                                                                           |
| ------------------- | --------------------------------------------------------------------------------------- |
| **review-created**  | A customer submits a rating or review (including when they first click a rating link).  |
| **review-updated**  | An existing review is updated (for example, the customer adds or edits their feedback). |
| **review-deleted**  | A review is removed.                                                                    |
| **message-created** | A review request message is created or scheduled.                                       |
| **message-updated** | A message is updated (for example, when it is sent or delivered).                       |
| **message-deleted** | A message is removed or canceled.                                                       |

### Review Events: Created vs Updated

A review is created as soon as a customer clicks a rating link in an email or SMS. When they land on your review page, the rating is already saved—even before they type any text or submit the form. If they then add feedback or a written review in the form, that update triggers a second event.

So for a single customer visit, you may receive:

1. **review-created** – When they click the rating link and the page loads.
2. **review-updated** – When they submit the form with additional feedback or text.

{% hint style="info" %}
If you only need to know when a customer has finished their full review (including text), use the **review-updated** event. The **review-created** event fires when the rating alone is captured.
{% endhint %}

### What Your Endpoint Receives

Each notification includes the event type and the full data for that review or message. Your endpoint receives the data in a standard format and should respond quickly to confirm receipt. If your endpoint does not respond successfully, the platform will retry a few times. After several failed attempts, the webhook may be automatically turned off to avoid repeated errors.

{% hint style="warning" %}
Webhooks are included on **Business** and **Agency**. If you don’t see the option to add webhooks, upgrade your plan.
{% endhint %}

### Managing Webhooks

* **Turn off** – Use the switch next to a webhook to pause it. No events are sent while it’s off. Turn it back on when you’re ready.
* **Edit** – Change the URL or choose which event types to receive. By default, a webhook receives all events. When editing, you can uncheck events you don’t need so only the relevant ones are sent.
* **Delete** – Remove a webhook from the actions menu when you no longer need it.


# Review Pages

Customizable pages where customers leave ratings and reviews.

A review page is where your customers land when they click a link from an email, SMS, or your website. They select a rating (e.g., faces or stars), then see a feedback form, links to third-party review sites, or a redirect—depending on how you've configured the page. Review pages are the core of collecting feedback and driving customers to leave reviews on Google, Yelp, and other sites.

### Where to Find Review Pages

Click **Review Pages** in the sidebar. You'll see a list of your review pages. Click one to edit it. Each review page has a sidebar with sections: **Settings**, **Appearance**, **Success Page**, **Feedback Form**, **Links**, **Redirects**, **Locations** (if you have locations), **QR Code**, and **Code Editor**.

Use **Edit** and **Preview** in the top bar to switch between editing and a working preview of the review page. Preview shows the last saved page and lets you click through it the way a customer would. Ratings and reviews in Preview are not submitted. To see the kiosk page, open the actions menu on the review pages list and choose **View Kiosk Page**.

***

### Creating and Managing Review Pages

* **Add** – Create a new review page. Give it a name and configure it.
* **Default** – One review page can be the default. It's used when no other page is assigned (e.g., for a customer or location).
* **Duplicate** – Copy an existing review page to use as a starting point.
* **Delete** – Remove a review page. Your default page cannot be deleted until you set another as default.

You can filter the list by location or by whether the page has links or redirects.

***

### What Each Section Does

| Section                                                 | Purpose                                                                                                                         |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| [Settings](/platform/review-pages/settings)             | Title, introduction, footer, button label, instructions per rating, rating options, and email notifications                     |
| [Appearance](/platform/review-pages/appearance)         | Layout, alignment, fonts, background color, and background image                                                                |
| [Success Page](/platform/review-pages/success)          | Headline, confirmation message per rating, copied message, and button after submit                                              |
| [Feedback Form](/platform/review-pages/feedback-form)   | Form inputs for name, email, review text, and custom fields. [AI review suggestions](/platform/review-pages/review-suggestions) |
| [Links](/platform/review-pages/links)                   | Buttons that link to third-party review sites (Google, Yelp, etc.)                                                              |
| [Redirects](/platform/review-pages/redirects)           | Automatic redirects to review sites after a rating is selected                                                                  |
| [Locations](/platform/review-pages/locations)           | Assign locations to this page and enable the location picker                                                                    |
| [QR Code](/platform/review-pages/qr-code)               | Download a QR code that links to your review page                                                                               |
| [Code Editor](/platform/review-pages/code-editor)       | Custom styles and scripts for advanced customization                                                                            |
| [URL Parameters](/platform/review-pages/url-parameters) | Pre-fill location, rating, name, email, and more by adding parameters to your review or kiosk link                              |
| [Kiosk](/platform/review-pages/kiosk)                   | Display a QR code on a tablet or screen for customers to scan and leave reviews on their phone                                  |

***

### The Customer Flow

1. Customer receives a link (from email, SMS, or in person).
2. They open the review page and see your title and introduction.
3. They select a rating (e.g., tap a face or star).
4. Depending on your setup, they may see:
   * A form to leave feedback or a review
   * Buttons to leave a review on Google, Yelp, etc.
   * An automatic redirect to a review site
5. After submitting, they see the success page.

{% hint style="info" %}
All reviews—positive and negative—are stored in the platform. You can hide negative reviews from your [Showcase](/platform/showcase) and widgets, but they remain in your data for follow-up and improvement.
{% endhint %}


# Settings

Configure the template, instructions, rating options, and email notifications for your review page.

The **Settings** section controls the main content and behavior of your review page. It includes four parts: **Template**, **Instructions**, **Options**, and **Notifications**.

***

### Template

The template defines the core text and structure customers see:

* **Name** – The internal name for this review page (e.g., "Main Feedback Form"). Used in the app, not shown to customers.
* **Title** – The headline at the top of the page. Often a question, like "How was your experience?"
* **Introduction** – A short paragraph below the title inviting customers to leave feedback.
* **Footer** – Optional text at the bottom, such as a disclaimer or legal information.
* **Button Label** – The text on the submit button (e.g., "Submit" or "Send Feedback").

***

### Instructions

Instructions appear directly above the form after a customer selects a rating. You can set different instructions for each rating level. For example:

* For a 5-star rating: "Thanks! Please share your experience so others can learn from it."
* For a 1-star rating: "We're sorry to hear that. Tell us what went wrong so we can improve."

Use the tabs to switch between ratings and edit the instructions for each. This lets you tailor the message based on whether the customer had a positive or negative experience.

***

### Options

These options control how ratings and reviews work:

* **Rating selection** – When to save the rating:
  * **Save rating before customer review** – Only when the customer arrives via email, SMS, or a direct customer link. Anonymous visitors don't have their rating saved until they submit the form.
  * **Save rating before every review** – Save the rating for anyone who visits the page, including anonymous visitors.
  * **Never save rating before review** – Only save the rating when the customer submits the form or leaves a written review.
* **Native reviews** – Whether to accept written reviews (testimonials) on your page. If disabled, customers who give a positive rating will only see links to third-party sites (you must add at least one [Link](/platform/review-pages/links) or [Redirect](/platform/review-pages/redirects)). Negative ratings still show the feedback form.
* **Editable ratings** – Whether customers can change their rating immediately after selecting it. If disabled, they must refresh the page to pick a different rating.

{% hint style="info" %}
If you disable native reviews for positive ratings, make sure you have links or redirects configured. Otherwise, customers who select a positive rating will have nothing to click.
{% endhint %}

***

### Notifications

Enter one or more email addresses (separated by commas) to receive a notification whenever someone submits a review on this page. Useful for staying on top of new feedback, especially negative reviews that need a quick response.

***

### Tips

{% hint style="success" %}
Use the instructions to set expectations. For negative ratings, a short "We're sorry—please tell us more" can encourage detailed feedback you can act on.
{% endhint %}

{% hint style="info" %}
Keep the introduction brief. Customers are more likely to complete the form when the page is easy to scan.
{% endhint %}


# Appearance

Customize the layout, fonts, and background of your review page.

The **Appearance** section controls how your review page looks. You can choose the layout, text alignment, font, background color, and an optional background image so the page matches your brand.

***

### Layout

Choose how the content is arranged on wider screens:

* **Default** – A centered layout with the form and content in a single column.
* **Split** – A split-screen layout with content on one side and the form on the other.
* **Split 2** – Same as split, but with the sides reversed.

On smaller screens (e.g., mobile), the layout typically stacks into a single column for easier reading.

***

### Text Alignment

Choose **Left** or **Center** alignment for the text and form. Center alignment works well for a focused, minimal look; left alignment can feel more natural for longer content.

***

### Font Family

Pick a font for the review page. You can choose from:

* **System fonts** – Fonts that are already on most devices (e.g., Arial, Georgia).
* **Google fonts** – A wider selection of web fonts that load when the page is visited.

Use a font that matches your website or brand for a consistent experience.

***

### Background Color

Set the color behind the form and content. This is the main background of the page. Choose a color that contrasts well with your text and form fields.

***

### Background Image

Optionally add an image as the page background. The image appears behind the form. Use one that doesn't distract from the form—subtle textures or branded imagery work well.

* **Max file size** – 5MB
* **Min dimensions** – 500px
* **Max dimensions** – 5000px

{% hint style="info" %}
If you use a background image, make sure the form area remains readable. A semi-transparent overlay or a solid form background can help.
{% endhint %}

***

### Tips

{% hint style="success" %}
Match your review page appearance to your website. Consistent branding builds trust and can improve completion rates.
{% endhint %}


# Success Page

Customize the page customers see after submitting a review.

The success page appears after a customer submits their review or feedback. You can customize the headline, confirmation message (per rating), copied message, and button so the experience feels complete and on-brand.

***

### Title

The main headline shown after submission. For example: "Thanks for your feedback!" or "We appreciate you taking the time."

***

### Confirmation Message

The confirmation message appears below the title on the success page. You can set a different message for each rating level. For example:

* For a 5-star rating: "Thanks! Copy your review below and paste it on Google so others can find us."
* For a 1-star rating: "We're sorry about your experience. Someone from our team will follow up shortly."

Use the tabs to switch between ratings and edit the message for each. Customers only see the message that matches the rating they selected.

Click **Copy to All Ratings** if you want the same message on every rating, then edit individual ratings as needed. Click **Save** when you're done.

***

### Copied Message

When a customer leaves a positive review (typically 4 or 5 stars), the platform can copy their review text to the clipboard so they can paste it on Google, Yelp, or elsewhere. The **Copied message** is the text that appears to confirm the copy worked—e.g., "Your review has been copied. Paste it on Google to share it with others."

***

### Button Label and Link

The success page includes a button that takes the customer somewhere when they're done. Customize:

* **Button label** – The text on the button (e.g., "Back to our website" or "Leave a Google review").
* **Button link** – The URL the button goes to. You can send them to your website, a third-party review site, or anywhere else.

{% hint style="info" %}
If you want customers to leave a review on Google after a positive rating, set the button to your Google review link. You can find it in your [Links](/platform/review-pages/links) section.
{% endhint %}

***

### Tips

{% hint style="success" %}
For positive reviews, use the confirmation message to encourage sharing. A line like "Copy your review and paste it on Google to help others find us" can boost your third-party review count.
{% endhint %}

{% hint style="info" %}
For negative reviews, a sincere apology and a promise to follow up can help retain the customer and show you care.
{% endhint %}


# Feedback Form

Capture customer info, feedback, and reviews with form fields. Add custom fields and show them conditionally based on the rating selected.

The Feedback Form is where customers enter name, email, review text, and any other details you collect. Your review page comes with default fields. You can add custom fields, reorder them, and show different fields for different ratings.

### Where to Find the Feedback Form

Open a review page and click **Feedback Form** in the sidebar. You'll see a table of all fields. Click **Add** to create a custom field, or **Edit** on any row to change its options. Drag the handle on the left to reorder fields—the order on the page matches the order in the table.

***

### Default Fields

Every review page starts with these fields. They can't be deleted, but you can disable or require them:

* **First Name** – The customer's first name
* **Last Name** – The customer's last name
* **Email Address** – The customer's email
* **Phone Number** – The customer's phone (disabled by default)
* **Company** – The customer's company name (disabled by default)
* **Review** – The main feedback or testimonial text

All default fields are shown for every rating unless you disable them. Use the **Edit** button to turn fields on or off or make them required.

***

### Custom Fields

Click **Add** to create a custom field. Choose a type, give it a label, and save. Custom fields can be deleted, reordered, and shown only for certain ratings—unlike default fields.

#### Field Types

* **Text** – A single-line input for short answers
* **Paragraph** – A multi-line area for longer text
* **Checkbox** – A yes/no option
* **Dropdown** – A list where the customer picks one choice from options you define
* **URL** – An input for web addresses
* **Image** – A file upload for images

#### Visibility

When editing a custom field, use the **Visibility** section to choose which ratings show the field. For example:

* Show "What could we improve?" only for 1–3 star ratings
* Show "Would you recommend us?" only for 4–5 star ratings

This lets you tailor the form: a feedback-focused form for negative ratings and a review-focused form for positive ones.

***

### Field Options

When editing any field, you can set:

* **Require field** – The customer must fill it in to submit the form
* **Disable field** – The field is hidden from the form
* **Hide field label** – The label above the field is hidden (useful with placeholder text for a cleaner look)

For custom text and paragraph fields, you can also set **Minimum characters** and **Maximum characters** to limit the length of the input.

For select fields, add the choices customers can pick from when you create or edit the field. They can choose one option.

***

### Reordering Fields

Drag fields up or down using the handle on the left of each row. The order in the table is the order customers see on the form. Changes are saved automatically when you reorder.

{% hint style="info" %}
Custom fields are included on **Business** and **Agency**. If the Add button is locked, upgrade your plan.
{% endhint %}

***

### AI Review Suggestions

Below the fields table, you can enable [AI Review Suggestions](/platform/review-pages/review-suggestions) so customers who leave a 4 or 5 star rating can generate a starting point for the review field.

***

### Tips

{% hint style="success" %}
Use visibility to keep the form short. Show only the fields that make sense for each rating—fewer fields can mean more completions.
{% endhint %}

{% hint style="info" %}
The Review field is where customers write their testimonial or feedback. Keep it enabled so you capture what they have to say.
{% endhint %}

{% hint style="info" %}
Use placeholder text with "Hide field label" for a minimal look. The placeholder appears inside the field and the label is hidden above it.
{% endhint %}


# Links

Prompt customers to leave reviews on 3rd party review sites.

You can add links to 3rd party reviews sites to your review page. This is essential if you would like to get more good reviews on sites like Google, Facebook, Yelp, TripAdvisor, and more. Links appear on your review page as buttons, if the review is a positive one (typically a rating of 4 or 5, but you can customize this). If the review is not positive, by default, we will display a link revealer — a small button beneath the feedback form that gives the customer the option of leaving a public review.

### Link Anatomy

The buttons that appear on your review page are fully customizable. You can edit the following:

* **Source** - Google, for example. This is used to pre-fill the label, color, and icon.
* **Label** - The label of the button.
* **Color** - The color of the button.
* **Icon** - Choose from our icon library or upload your own image.\
  Specs: 1:1, max: 5mb, min size: 64px x 64px, max size: 1000px x 1000px

{% hint style="info" %}
Icons from MGR's library use the same wording rules as icons on tags and sources. If automation fills in icon text for you, use two lowercase words separated by one space (for example **fab fa-google** or **fas fa-star**).
{% endhint %}

* **Link** - The URL to the 3rd party review site.
* **Incentive** - An optional incentive to display underneath the button.

### Link Options

We give you full control over how the links are displayed to your customers.

* **Link Reveal Rating** - Reveal links if the customer picks a specific rating or higher. Otherwise, a small button to reveal the links will be shown (the link revealer).
* **Link Reveal Label** - The label of the button to reveal the links.
* **Link Reveal Timing** - Choose whether to show your links immediately after a rating is chosen, or on the success page, after a review has been submitted.
* **Link Reveal Button** - Choose whether or not to show the link revealer at all.

{% hint style="danger" %}
You can disable the option to direct your customers to leave public reviews if the rating is negative, but we do not recommend it. Preventing customers from leaving public reviews can get your 3rd party listings removed.
{% endhint %}

For a full overview, see [Google Review Guidelines](/platform/google-review-guidelines).


# Redirects

Send customers directly to third-party review sites after they select a rating. Skip the form and split traffic across multiple sites.

Redirects send customers straight to a URL as soon as they select a rating. There is no form and no extra steps. They're useful when you want a fast path to Google, Yelp, TripAdvisor, or another public review site. You can add up to five redirect URLs per rating and split traffic between them using percentages.

### Where to Find Redirects

Open a review page and click **Redirects** in the sidebar. You'll see a table with one row per rating. Enter a URL for each rating you want to redirect, then click **Save**.

***

### How Redirects Work

By default, every rating is blank. The customer stays on your review page, can leave feedback, and can still leave a public review through your [Links](/platform/review-pages/links), including the [link revealer](/platform/google-review-guidelines).

A redirect only runs if you add a URL for that rating. Then the customer is sent to that URL right away and the form is skipped. For example:

* **5 stars** – Redirect to your Google review link
* **1–4 stars** – Leave blank so those customers stay on your review page

That keeps a public review path for every customer. Sending only high ratings to Google and sending low ratings to a private page with no public option is review gating. Google does not allow that.

***

### Splitting Traffic

If you want reviews on more than one site, you can add multiple URLs for the same rating and split traffic between them. For example, for 5-star ratings:

* Google – 50%
* Yelp – 25%
* TripAdvisor – 25%

Each customer is sent to one of the URLs at random, according to the percentages. Click the **+** button next to a URL to add another. You can add up to five URLs per rating. The percentages for each rating must add up to 100%.

{% hint style="info" %}
Use traffic splitting when you want reviews spread across Google, Yelp, Facebook, and other sites. One customer might go to Google, the next to Yelp—so you build presence on multiple platforms.
{% endhint %}

***

### Redirects vs Links

* **Redirects** – The customer is sent away immediately after selecting a rating. No form, no review captured on your page first.
* **Links** – The customer sees buttons they can click. They may fill out your form first (or not, depending on your [Settings](/platform/review-pages/settings)). Links give customers a choice; redirects send them straight through.

Use redirects when you want the fastest path to a third-party review. Use [Links](/platform/review-pages/links) when you want to capture a review or feedback on your page first, or when you want customers to choose where to leave a review.

***

### Tips

{% hint style="success" %}
Leave ratings blank unless you want an immediate send to a public review site. Blank ratings keep the default path: your form, your links, and the link revealer.
{% endhint %}

{% hint style="warning" %}
Do not send only happy customers to Google and send unhappy customers to a private page with no public review option. That can get your listing removed. See [Google Review Guidelines](/platform/google-review-guidelines).
{% endhint %}

{% hint style="info" %}
Test each redirect URL after saving. Click through from your review page to confirm customers land on the right place.
{% endhint %}

{% hint style="info" %}
A redirect still saves the rating on your review page if you use **Save rating before every review** in [Settings](/platform/review-pages/settings). That row often shows as anonymous. If the customer then leaves a Google review with the same rating right away, MGR can mark the anonymous rating as a duplicate and keep the Google review. See [Reviews](/platform/projects/reviews).
{% endhint %}


# Locations

Assign locations to your review page and enable the location picker so customers can choose which location they're reviewing.

If your project has [locations](/platform/projects/locations), you can assign them to a review page and optionally let customers choose which location they're reviewing. This helps you collect and segment reviews by store, branch, or site.

***

### Assigning Locations to a Review Page

In the **Locations** section, select which locations should use this review page. A location can only be assigned to one review page. If a location isn't assigned to any page, it uses your default review page.

When you assign locations, you'll see a table with each location and quick links to:

* **Review page** – The URL for that location (includes `?location=slug` so reviews are attributed correctly).
* **Kiosk page** – A simplified view for in-store tablets or displays.

Use these links in receipts, signage, or when requesting reviews manually for a specific location.

{% hint style="info" %}
Assigning locations to a review page is required before you can use location-specific QR codes or the location picker.
{% endhint %}

***

### Location Picker

The **Location picker** lets customers choose which location they're reviewing when they visit the page. This is useful when:

* One review page serves multiple locations (e.g., a shared link)
* Customers might have visited different stores and need to select the right one

When enabled, customers see a dropdown at the top of the form. They pick a location before selecting a rating. The review is then attributed to that location.

* **Enable / Disable** – Turn the location picker on or off.
* **Label** – The text shown above the dropdown (e.g., "Which location did you visit?").

If the link includes `?location=slug`, that location is pre-selected so the customer doesn't have to choose.

{% hint style="success" %}
Use the location picker when you have one link for many locations (e.g., on your website). Use location-specific links (`?location=slug`) when you know the location in advance (e.g., on a receipt or in-store sign).
{% endhint %}

***

### How It Works With Project Locations

Locations are created in **Settings > Locations**. Once you have locations, you can:

1. Assign them to review pages (each location uses one page)
2. Enable the location picker so customers can select a location
3. Use location-specific URLs for receipts, QR codes, and signage
4. Filter reviews, messages, and Analytics by location
5. Upload a logo per location so review pages and kiosk displays show the right branding for each store or branch

***

### Tips

{% hint style="info" %}
If you have many locations, consider grouping them with different review pages. For example, use one page for retail stores and another for service locations.
{% endhint %}


# QR Codes

Create and save multiple QR codes for your review page. Download codes with custom colors, locations, and tags to collect feedback.

Create and save multiple QR codes that link to your review page. Each code can have its own name, location, tags, color, and file format. Place them on receipts, in-store signage, tables, or anywhere customers can scan to leave feedback. When they scan, they go straight to your review page — and reviews are automatically attributed to the right location or tagged for your reports.

***

### Where to Find It

Open a review page and click **QR Codes** in the sidebar. You'll see a list of your saved codes. If you haven't created any yet, click **Create QR Code** to add your first one.

***

### Creating a QR Code

Click **Create QR Code** (or **Add** if you already have codes). A form appears where you can set:

* **Name** – A label to identify this code in your list. For example: "Table 1", "Reception", or "Downtown Store". This helps you tell codes apart when you have several.
* **Location** – If you've [assigned locations](/platform/review-pages/locations) to this review page, you can select a location for the QR code. The code will link to the review page with that location pre-selected, so reviews from that scan are attributed to that location. Useful when you have different QR codes at different stores.
* **Tags** – Optionally assign tags to reviews that come from this QR code. Helps you segment or filter reviews in reports and build your reputation with organized feedback.
* **Color** – The color of the QR code. By default, it uses your project's primary color. Choose a color that contrasts with the background where you'll print or display it.
* **Output** – Choose the file format:
  * **SVG** – Vector format. Scales without losing quality. Best for print and design work.
  * **PNG** – Raster format. Good for web and simple printing.

Click **Create** to save the code. It appears in your list right away.

***

### Managing Your QR Codes

Each saved code appears as a card showing its name and details (location, tags, output format). From each card you can:

* **Edit** – Change the name, location, tags, color, or output format. You can also delete the code from the edit screen.
* **Download** – Get the QR code file in the format you chose (SVG or PNG).

To add more codes, click **Add** at the bottom of the page.

***

### Using Your QR Codes

After downloading, you can:

* Print them on receipts, flyers, or table tents
* Add them to in-store signage or window decals
* Include them in email signatures or marketing materials
* Display them on a tablet or screen for customers to scan

{% hint style="info" %}
For best results, print the QR code at least 2 cm (about 0.8 inches) square so it's easy to scan with a phone camera.
{% endhint %}

***

### Tips

{% hint style="success" %}
Use location-specific QR codes when you have multiple stores. Each location gets its own code, and reviews are automatically attributed to the right place — great for ratings and reputation management across locations.
{% endhint %}

{% hint style="info" %}
Test each QR code after downloading. Scan it with your phone to confirm it goes to the correct page and that the location (if set) is pre-selected.
{% endhint %}

{% hint style="warning" %}
If you delete a QR code, any printed copies will still work — they'll still link to your review page. But you won't be able to edit or re-download that code from your list.
{% endhint %}


# Suggestions

Enable AI review suggestions so customers can generate a starting point they can edit.

AI Review Suggestions help customers get started on a review. The feature is off by default. When you enable it, customers who leave a 4 or 5 star rating see a **Generate** button next to the review field. One click produces several suggestions they can pick from, edit, or ignore. The review should still be their own words.

***

### Where to Find It

Open a review page and click **Feedback Form** in the sidebar. Below the fields table, you'll see **AI Review Suggestions**, which you can turn on or off for that page. You can also choose pages in bulk from **Settings → AI Tools → Review Suggestions**.

***

### Enabling AI Review Suggestions

Set **Review Suggestions** to **Enable** and click **Save**. Suggestions are now active on that review page. You can enable them on some pages and leave them off on others. Each review page has its own setting.

{% hint style="info" %}
Before AI Review Suggestions work, add a **Business Description** in **Settings → Project** (at least 50 characters). Then set language, keywords, and custom instructions in **Settings → AI Tools**. See [AI Tools](/platform/ai-tools).
{% endhint %}

***

### What Happens When It's Enabled

When AI Review Suggestions are enabled on a review page, here's what customers see:

1. **They open your review page** and select a rating (e.g., stars or faces).
2. **If they choose a positive rating** (4 or 5 stars) and your page shows a review field, a **Generate** button appears next to it.
3. **They click Generate** and a window opens with several review suggestions. Each suggestion is a starting point based on your project settings.
4. **They can**:
   * **Select** – Put a suggestion in the review field so they can edit it.
   * **Copy** – Copy a suggestion so they can edit it before using it elsewhere.
   * **Regenerate** – Get a new set of suggestions.
5. **They submit** their review as usual. They can edit any suggestion before submitting.

{% hint style="warning" %}
Suggestions are a starting point. Customers should edit the text so it matches their experience. Do not post a suggestion to Google for them. See [Google Review Guidelines](/platform/google-review-guidelines).
{% endhint %}

{% hint style="info" %}
The Generate button only appears when customers are writing a review on your page. If your page redirects them away right after they pick a rating, they will not see the button.
{% endhint %}

***

### When the Button Does Not Appear

The Generate button does not show when:

* The customer selects a low or neutral rating (below 4 stars).
* The review page redirects customers to an external site immediately after they choose a rating.
* The review page does not include a review text field for that rating.
* AI Review Suggestions are disabled for that review page.

***

### Tips for Better Results

* **Configure your project first** – A clear business name and description in **Settings → Project** help the AI produce relevant, on-brand starting points.
* **Use with links, not redirects** – If you want customers to stay on your page long enough to write and edit a review, use [Links](/platform/review-pages/links) instead of [Redirects](/platform/review-pages/redirects).
* **Enable on high-traffic pages** – Turn on AI Review Suggestions for review pages where you send the most customers, such as email, SMS, or QR codes.


# Code Editor

Extend review pages with custom styling or scripted tweaks when standard Appearance controls are not enough.

The Code Editor lets you add custom styling rules and scripts to your review page. Use it when you want to tweak the look of your feedback form or add behavior that goes beyond the built-in [Appearance](/platform/review-pages/appearance) options. Your custom styles and scripts apply when customers visit the page to leave reviews and ratings.

### Where to Find the Code Editor

Click **Review Pages** in the sidebar, then select a review page. In the review page sidebar, click **Code Editor**. You'll see two sections: **Styles** and **Scripts**.

{% hint style="info" %}
The Code Editor is an advanced feature. If the section appears locked or you see an upgrade message, your plan may not include custom styles and scripts. Check your plan or contact support.
{% endhint %}

***

### Styles

The **Styles** section lets you add your own styling rules to change how the review page looks. You might use it to:

* Adjust spacing, borders, or colors beyond the Appearance settings
* Match fonts or colors to your website
* Fine-tune the layout of the form or rating selector

Type or paste your styling rules into the editor. When you're done, click **Save**. Your changes apply to the review page as soon as customers load it.

{% hint style="success" %}
Switch to **Preview** in the top bar to see how your review page looks with your custom styles before sending links to customers. Custom scripts do not run in Preview. Use **View** if you need to test scripts on the real page.
{% endhint %}

***

### Scripts

The **Scripts** section lets you add custom scripts that run when the review page loads. You might use it to:

* Track visits with analytics
* Add custom behavior when customers interact with the form
* Integrate with other tools on your site

Type or paste your scripts into the editor. Click **Save** when you're done. Scripts run when customers open the page to leave feedback.

{% hint style="warning" %}
Scripts run on your review page and can affect how it works. Custom scripts do not run in Preview. Use **View** to test them on the live page. Incorrect scripts may prevent customers from submitting reviews.
{% endhint %}

***

### Saving Your Changes

Each section (Styles and Scripts) has its own **Save** button. Click **Save** in the section you edited to apply those changes.

If you have more than one review page, clicking **Save** opens a confirmation dialog. You can choose to:

* **Save to this page only** – Apply your changes only to the review page you're editing.
* **Publish to all other review pages** – Copy the same styles or scripts to all your other review pages. Useful when you want consistent customization across locations or use cases.

{% hint style="info" %}
Styles and scripts are stored separately. If you update Styles and publish to other pages, only the styles are copied—scripts on those pages stay as they are, and vice versa.
{% endhint %}

***

### Tips

{% hint style="success" %}
Start with small changes and preview often. That way you can spot issues before customers see them.
{% endhint %}

{% hint style="info" %}
If your review page looks broken after adding styles or scripts, try removing what you added and saving again. You can always revert to a blank editor.
{% endhint %}


# URL Parameters

Pre-fill location, rating, name, email, and more by adding parameters to your review page or kiosk URL.

You can add parameters to your review page URL (or kiosk link) to pre-fill or pre-select information when customers visit. This saves customers time and ensures reviews are attributed correctly. Append parameters using `?` for the first parameter and `&` for additional ones.

***

### Location

Add `location=slug` to send customers to a specific location. The location picker (if enabled) will show that location as already selected, and the review will be attributed to it. Use the location's slug from your [Locations](/platform/review-pages/locations) settings.

Example: `yoursite.com/review?location=downtown`

***

### Form

If you have multiple review pages, add `form=123` (using your review page's ID) to show a specific page instead of the default. Useful when different campaigns or channels use different pages.

***

### Rating

Add `score=5` (or 1–5) to pre-select a rating. Customers see that rating already chosen when they arrive. Often used in email or SMS links where you want to emphasize a positive rating.

***

### Tags

Add `tags=slug1,slug2` to tag reviews that come from that link. Helps you segment feedback in reports (e.g., "in-store" vs "online").

***

### Name, Email, Phone

Add `first_name`, `last_name`, `email`, or `phone` to pre-fill those form fields. Useful when you have customer info from another system (e.g., a booking or checkout) and want to pass it into the review link.

Example: `yoursite.com/review?first_name=Jane&email=jane@example.com`

***

### Combining Parameters

You can combine any of these parameters in a single URL:

`yoursite.com/review?location=downtown&score=5&first_name=Jane&email=jane@example.com`

{% hint style="info" %}
Links sent via email or SMS include a token that automatically pre-fills the customer's name and email. No need to add those as URL parameters when using tracked links.
{% endhint %}

{% hint style="success" %}
Use location-specific links on receipts, table tents, or in-store signage so reviews are attributed to the right store. Combine with `score=5` to encourage positive ratings and build your reputation.
{% endhint %}


# Kiosk

Display a QR code on a tablet or screen so customers can scan and leave ratings and feedback on their phone.

The **Kiosk Page** is a display page for in-store tablets, kiosks, or screens. It shows a QR code that customers scan with their phone. After scanning, they open your review page on their own device to leave ratings and feedback—ideal for capturing reviews at the point of experience without requiring customers to type on a shared tablet.

***

### What It Does

The kiosk page displays a QR code on a tablet or screen at your location. Customers scan the code with their phone camera, which opens your review page on their device. They then select a rating, leave feedback, or follow links to third-party review sites—all on their phone.

When you use a location-specific kiosk link, the kiosk page shows that location's logo at the top if one is uploaded. If no location logo is set, your project logo from **Settings > Appearance** is used instead.

All feedback submitted after scanning is saved the same way as feedback from email, SMS, or your website. Ratings and reviews appear in your project and can be attributed to a specific location when you use a location-specific kiosk link.

***

### Where to Find Your Kiosk Link

Your kiosk page has its own link, separate from your standard review page link. You can access it in several places:

* **Review Pages list** – Open the review pages list, then open the actions menu for a page and choose **View Kiosk Page**.
* **Locations section** – If you've [assigned locations](/platform/review-pages/locations) to your review page, each location row has a **Kiosk Page** button. Click it to open the kiosk page with that location pre-selected, so reviews are attributed to the correct store or branch.

The **Preview** toggle on a review page shows the review page only. It does not show the kiosk page.

***

### How to Use the Kiosk Page

1. Open your kiosk link on a tablet, kiosk, or display at your location.
2. Leave the page open so customers can see the QR code.
3. Customers scan the QR code with their phone camera.
4. The review page opens on their phone. They select a rating, leave feedback, or follow links to Google or other review sites—depending on your [Settings](/platform/review-pages/settings), [Links](/platform/review-pages/links), and [Redirects](/platform/review-pages/redirects).
5. After submitting, they see your [Success Page](/platform/review-pages/success) on their phone.

Reviews and ratings from the kiosk are stored in your project and appear in your [Reviews](https://github.com/moregoodreviews/mgr-docs/tree/main/platform/review-pages/platform/projects/reviews.md) and [Analytics](https://github.com/moregoodreviews/mgr-docs/tree/main/platform/review-pages/platform/projects/analytics.md).

***

### Location-Specific Kiosks

If you have multiple locations, use a separate kiosk link for each one. This ensures reviews are attributed to the correct location.

* In the **Locations** section of your review page, click **Kiosk Page** next to each location to get that location's kiosk link.
* You can also add `?location=your-location-slug` to your main kiosk link to target a specific location. For a full list of parameters (location, rating, name, email, and more), see [URL Parameters](/platform/review-pages/url-parameters).

{% hint style="info" %}
Use location-specific kiosk links when you have displays at different stores or branches. Each link keeps reviews tied to the right place for reporting and reputation management.
{% endhint %}

***

### Tips

{% hint style="success" %}
Place the tablet or screen near the exit or at the counter where customers can easily scan the QR code. A simple "Scan to leave a review" prompt encourages quick feedback.
{% endhint %}

{% hint style="info" %}
Because customers complete the review on their own phone, they can take their time and type comfortably—often leading to more detailed feedback and better ratings.
{% endhint %}

{% hint style="warning" %}
Keep the tablet or screen in a spot where the QR code is clearly visible and easy to scan. Ensure good lighting and avoid glare so phone cameras can read the code reliably.
{% endhint %}


# Request Strategy

Automate your review requests based on a strategy, or set of rules.

Your request strategy controls when and how MGR sends review requests to your customers. Each project has its own strategy. You decide who gets asked, when they get asked, and how many follow-ups they receive. The goal is to request reviews at the right times from customers who are likely to leave positive feedback.

Go to **Settings** in the sidebar and select **Strategy** to view and edit your strategy.

### What It Does

The strategy is a set of rules that runs automatically. When a customer meets your conditions (for example, they signed up or were charged, and they have enough charge history), MGR waits for the delay you set, then sends the first review request. If they don't respond, reminders and retries can follow. Limits and schedules help you control volume and timing.

***

### Settings

#### Trigger

The trigger starts the process. Choose when the first request is sent:

* **Send request after a date** – Use the customer's signup or start date.
* **Send request after a charge** – Use the date of their most recent charge.

#### Delay

How long to wait after the trigger date before sending the first request. You can set the delay in hours, days, or months. For example, wait 14 days after signup, or 2 hours after a charge.

#### Channels

Choose how to reach customers: **Email**, **SMS**, or both. SMS requires an SMS connection and is included on **Business** and **Agency** plans. If you use SMS, you need permission from each person before you text them. See [SMS Consent](/sms/sms-consent).

#### Thank You Messages

Enable or disable automatic thank-you messages when a customer leaves a review. When enabled, MGR sends a short thank-you over the same channel(s) you use for requests.

#### Message Link Expiration

Optionally expire the review link after a set number of days (3, 5, 7, 14, 30, 60, or 90). After that, the link no longer works. Leave this blank for no expiration.

***

### Reminders

If a customer doesn't click a rating in any of your emails or messages, you can send reminders. Choose how many reminders to send (0, 1, 2, or 3) and how many days to wait before each one.

* **One reminder** – Set a single delay (e.g., 2 days later).
* **Two or three reminders** – Set a separate delay for the first, second, and third reminder.

If you use both email and SMS, you can exclude one channel from reminders. For example, send reminders by email only and not by SMS.

{% hint style="info" %}
Reminders are included on **Business** and **Agency**. If the option is locked, upgrade your plan.
{% endhint %}

***

### Retries

Retries are different from reminders. A **retry** is a new full request sequence sent to a customer who never clicked a rating in any of your previous requests or reminders. Use retries to give them another chance later.

Choose how many retries to send (0, 1, or 2) and how many days to wait after the last request before sending the next sequence.

{% hint style="info" %}
Retries are included on **Business** and **Agency**. If the option is locked, upgrade your plan.
{% endhint %}

***

### Schedule

Control which days and times requests are sent. For each day of the week you can:

* **Send anytime** – Requests can go out any time that day.
* **Send between** – Choose a start and end time (e.g., 9:00 AM–5:00 PM).
* **Do not send** – No requests on that day.

Set a time zone so the schedule applies correctly for your customers.

***

### Conditions

Narrow who receives requests based on charge history and subscription status.

#### Require Subscription

When set to **Yes**, only customers with an active subscription receive requests. Customers without a subscription are skipped.

#### Charge Conditions

Target higher-value customers by setting minimums:

* **Number of charges** – Minimum number of charges (e.g., at least 3).
* **Total charge amount** – Minimum total amount charged (in your project currency).
* **Average charge amount** – Minimum average per charge (in your project currency).

Leave any field at 0 to skip that condition. All conditions you set must be met for a customer to receive a request.

***

### Limits

Cap how many requests go out per day or per month for email and SMS. This helps you stay within provider limits or control costs.

* **Daily email requests** – Max requests per day by email.
* **Monthly email requests** – Max requests per month by email.
* **Daily SMS requests** – Max requests per day by SMS.
* **Monthly SMS requests** – Max requests per month by SMS.

Leave a limit blank for no cap. Limits apply per project.

{% hint style="info" %}
Limits may only be visible to account owners. If you don't see this section, your plan or role may restrict it.
{% endhint %}

***

### How to Edit Your Strategy

1. Go to **Settings** in the sidebar.
2. Click **Strategy**.
3. Adjust the sections you need (Settings, Reminders, Retries, Schedule, Conditions, Limits).
4. Click **Save** in each section after making changes.

Changes apply to future requests. Customers already in the queue keep their existing schedule.

***

### What Happens When a Customer Responds

When a customer interacts with a review request, MGR adjusts what gets sent next. This keeps customers from receiving follow-ups they no longer need.

#### When They Open Your Review Page

When a customer clicks a link in a request or reminder and lands on your review page, MGR stops any remaining reminders for that request. The current request sequence is considered complete, even if they have not submitted a rating yet.

If you use both email and SMS, opening the review page from either channel stops pending reminders for that customer across both channels.

#### When They Leave a Review

When a customer submits a rating or review (through your review page, a one-click rating in email, or a review you add manually for them), MGR:

* **Cancels all pending messages** – Any scheduled requests or reminders for that customer are canceled. They will not receive further follow-ups for that sequence.
* **Stops automatic retries** – The customer is marked as reviewed on the **Customers** page. They will not receive future automatic retry sequences from your strategy.
* **Sends a thank-you message** – If you have thank-you messages enabled, a thank-you email or SMS is still sent after they leave a review. Thank-you messages are not canceled when other messages are.

On the customer's profile, canceled messages stay in the **Messages** section as faded rows with a **canceled** label. See [Messages](/platform/projects/messages) for how they appear in the UI.

#### When They Click but Don't Review

If a customer opens your review page but leaves without submitting, they appear as **Review Missed** on the **Customers** page. Reminders for that request are already stopped, but if you have retries enabled and they never leave a review, they may still receive a new request sequence after your retry delay.

#### Asking Again Manually

Leaving a review stops automatic outreach for that customer, but you can always send another request manually from their profile on the **Customers** page.

{% hint style="info" %}
**Reminders vs. retries after a review:** Reminders are follow-ups within one request sequence. Retries are entirely new sequences sent later. Both stop automatically once a customer leaves a review.
{% endhint %}

{% hint style="success" %}
Customers who tap a one-click rating in email submit their rating right away. Reminders and retries stop for them just as they would if they completed the review on your page.
{% endhint %}

***

### Tips

{% hint style="info" %}
A customer is only automatically requested once per project. After that, you can manually send another request from the customer's page if you want to ask again.
{% endhint %}

{% hint style="success" %}
Start with a simple strategy—for example, 14 days after signup, email only, no reminders—and add conditions, reminders, or limits as you learn what works for your business.
{% endhint %}

{% hint style="warning" %}
If you use the "after a charge" trigger, make sure you're importing charge history from Stripe, an app connector, or the API. Without charge data, customers won't qualify.
{% endhint %}


# Adding Your Domain

### Sending Domain

By default, all emails for a project will be sent from our own domain name. Since it is a shared system, the email address will follow this pattern for each new project:

**reviews+\[PROJECT\_SLUG]@moregoodreviews.net**

You can change the email address by connecting your own domain name to MGR. In the [Domain Settings](https://moregoodreviews.com/settings/domain) section, add a domain that you own in the field. You will need to enter 4 DNS records to set up your sending domain. 2 TXT records and 2 MX records. This allows us to send emails on your behalf. We use a service called [Mailgun](https://www.mailgun.com/) to do this.

MX records are optional but recommended for better deliverability. While we don’t process incoming emails, some providers may mark your messages as spam if the sending domain has no MX records (inbox). Because the sending domain uses a subdomain, this won’t interfere with any inbox set up on your root domain.

Once all records are verified, the system will begin to send emails from your own domain name. If you want to change the left side of the email address and the sender name, you can do that in the [Email Settings](https://moregoodreviews.com/settings/email) section. We recommend using a real person's name as the sender, like "Scott from More Good Reviews".

{% hint style="info" %}
Please note that the domain won’t display a website, so visiting it in your browser won’t load a page. This is expected — the domain is used solely for sending emails.
{% endhint %}

#### DMARC Record

You will also need to add the suggested DMARC record to ensure your emails land in customer inboxes. DMARC is a way to stop fake emails that pretend to be from you. It checks if emails really come from your domain and can tell you when someone tries to fake it, helping keep your emails safe.

### **CNAME - Customer Facing Pages**

Much like the sending domain, all customer facing pages, like your review pages and showcase pages, will be loaded from our own domain: moregoodreviews.com. This means the links in all your messages will have our domain name in them. If you don't mind that, you don't have to do anything. But if you want your links to match your brand, you should add a CNAME record in the [Domain Settings](https://moregoodreviews.com/settings/domain) section.

Note that the example subdomain provided is “review” (singular). After adding your domain, a CNAME record will appear immediately, and a TXT record will show up a few minutes later. You must add both records to your DNS. Once verified, your customer-facing pages will use your own domain.

If you add a domain but never finish the DNS and SSL setup, your review pages and other customer-facing links keep using your default web address. After an extended period with incomplete setup, you have **7 days** to add the **CNAME** and **TXT** records and click **Verify**. If setup is still incomplete after that time, the custom domain is removed automatically. You can add the domain again at any time from **Settings** > **Domain**.

After your CNAME is active, use **Cookie Consent Banner** to choose who sees the consent prompt on review pages, showcase pages, and other customer-facing links on that domain:

1. Open **Settings**, **Domain**, and find **CNAME - Customer Facing Pages**.
2. Choose one of the options:
   * **Show to everyone** displays the banner to all visitors.
   * **Show to EEA & UK visitors only** limits the banner to visitors in the European Economic Area and United Kingdom.
   * **Do not show** turns the banner off.
3. Click **Verify** to save your choice.

Visitors who see the banner can accept all cookies, reject non-essential cookies, or customize preferences. They can reopen those settings later from **Cookie Preferences** in the page footer.

{% hint style="info" %}
If you use a white label agency portal and have not set your own customer-facing domain, cookie banner settings on the agency portal may apply instead.
{% endhint %}

#### Troubleshooting

{% hint style="warning" %}
Finish DNS setup soon after adding a custom domain. Incomplete setups may be removed automatically after you receive a setup warning.
{% endhint %}

1. Have you added both the CNAME and TXT records? The TXT record may take a few minutes to appear after adding your CNAME domain in the console. It’s required for SSL, ensuring your pages load over https. A common issue is the page not loading correctly because the SSL certificate hasn’t been issued yet.
2. If you are using Cloudfare, when entering your CNAME record, it is important your turn OFF the orange proxy switch. We use Cloudflare, and it cannot proxy to itself.
3. If the TXT record isn’t added to your DNS quickly, it may time out and disappear from the console. If that happens, remove the CNAME and add it again to generate a new TXT record for your DNS.

If you are still having trouble getting your CNAME to work, it might mean that Cloudflare cannot validate your SSL certificate. Try adding CAA records to your DNS and re-verifying in MGR. More on this here: <https://developers.cloudflare.com/ssl/edge-certificates/caa-records/>

Try adding the following CAA records to your DNS:

<table><thead><tr><th width="98">Name</th><th width="77.33333333333331">Type</th><th width="66">Flag</th><th width="105">Tag</th><th width="332">Value</th><th>TTL</th></tr></thead><tbody><tr><td>@</td><td>CAA</td><td>0</td><td>issue</td><td>"pki.goog; cansignhttpexchanges=yes"</td><td>60</td></tr><tr><td>@</td><td>CAA</td><td>0</td><td>issuewild</td><td>"pki.goog; cansignhttpexchanges=yes"</td><td>60</td></tr></tbody></table>


# Showcase

A dedicated page that displays your reviews and builds trust with visitors.

The Showcase is a dedicated page that displays your reviews for visitors to see. Unlike widgets, which you embed on your own website, the Showcase lives at its own address. You can share the link directly, add it to your navigation, or point customers to it after they leave a review. It helps build trust and reputation by putting your best feedback front and center.

Every project has one Showcase page. It is created automatically when you set up a project. You can customize what appears on it and how it looks.

### Finding the Showcase

Go to **Settings** in your project sidebar, then click **Showcase**. At the top of the page, use **View Showcase** to open your live Showcase in a new tab and see how it looks to visitors.

### Customizing the Showcase

The Showcase settings are organized into four sections. Each section has its own **Save** button — click it after making changes to apply them.

#### Settings

Control what information appears with each review:

* **Title** — The headline at the top of the page. It defaults to your project name if left blank.
* **Date** — Show or hide when each review was written.
* **Avatar** — Show or hide customer photos.
* **Name** — Choose how customer names appear: full name, first name with last initial, initials, or hidden.
* **Company** — Show or hide the company name when available.
* **Use filters for aggregate** — When set to Yes, the overall rating and review count at the top of the page respect your filter settings (such as lowest rating, sources, and tags). When set to No, the aggregate reflects all visible reviews.

#### Appearance

* **Font Family** — Choose a system font or a Google font to match your brand.

#### Call to Action

Add a button that encourages visitors to leave a review:

* **Button** — Enable or disable the call-to-action button.
* **Position** — Place it in the top-left, top-right, bottom-left, or bottom-right corner.
* **Size** — Choose small, medium, or large.
* **Label** — The text shown on the button.

{% hint style="info" %}
The call-to-action button is a great way to turn Showcase visitors into new reviewers. Place it where it’s visible but not distracting.
{% endhint %}

#### Filters

Control which reviews appear on the Showcase:

* **Lowest Rating** — Only show reviews with this rating or higher. For example, set to 4 to display 4- and 5-star reviews.
* **Review Length** — Only show reviews with at least this many characters. Use this to highlight more detailed feedback.
* **Since** — Only show reviews written on or after this date.
* **Sources** — Limit the Showcase to reviews from specific sources (for example, Google or Facebook).
* **Locations** — Limit the Showcase to reviews for specific locations.
* **Tags** — Limit the Showcase to reviews with specific tags.
* **Sort** — Show the newest reviews first, or the most positive reviews first.

{% hint style="success" %}
Filters help you curate the best reviews for your reputation. Use them to highlight positive feedback, longer testimonials, or reviews from a particular source.
{% endhint %}

### Sharing Your Showcase

Your Showcase has its own link. You can share it in emails, on social media, or add it to your website’s navigation. If you use a custom domain, the Showcase appears at that domain. Otherwise, it appears on the platform’s default address.

{% hint style="info" %}
Reviews, ratings, feedback, and testimonials on your Showcase help build trust with potential customers and improve your online reputation.
{% endhint %}


# Widgets

Display your reviews, ratings, and feedback on your website with embeddable widgets. Badge, Carousel, Wall, Corner, and more.

Widgets let you display your reviews, ratings, and feedback on your website. Create a widget in the builder, customize its appearance to match your brand, then copy the embed code and paste it into your site. Visitors see your reputation and testimonials right where they browse—helping build trust and drive conversions.

### Where to Find Widgets

Go to **Widgets** in the sidebar and click **Create Widget** or **Add**. Choose a widget type, give it a name, and you're taken to the builder. From there you can customize the design, preview it on desktop or mobile, and copy the embed code.

***

## Widget Types

Each widget type has a different layout and purpose. Some show a summary of your ratings; others display individual reviews or a rotating selection. Choose the one that fits your page and goals.

### Badge

A compact summary of your reviews. Shows your average star rating, total review count, and optionally the source logos (Google, Yelp, etc.). Ideal for sidebars, footers, or anywhere you want a small trust signal without taking much space.

### Headline

A bold headline-style display of your average rating and total review count. No individual reviews—just the headline numbers. Great for landing pages or hero sections where you want to lead with your reputation.

### Faces

A row of customer photos (avatars) from reviewers who have profile pictures. Shows the faces behind your reviews with your average rating and count below. Perfect for adding a human touch and social proof.

### Spotlight

A single featured review in a prominent layout. Ideal when you want to highlight one standout testimonial or piece of feedback. You choose which review to display.

### Carousel

A horizontal slider of hand-selected reviews. You pick the reviews to show, and they rotate with arrows or dots for navigation. Good for showcasing your best feedback in a controlled way.

### Dynamic Carousel

A horizontal slider that automatically updates to show your latest reviews. No need to manually pick reviews—it pulls new ones as they come in. Use this when you want fresh content without maintenance.

### Marquee

A continuously scrolling display of hand-selected reviews. Reviews scroll horizontally across the page in a ticker-style layout. Good for high-energy or busy pages where you want constant motion.

### Highlights

A continuously scrolling display of short review excerpts. You pick the reviews to show, and only the text you've highlighted in each review appears—for example, a key phrase like "best service ever" or "highly recommend." Useful for quick, punchy snippets of feedback.

{% hint style="warning" %}
**Manual highlighting required.** The Highlights widget only shows the text you've manually highlighted in each review. Go to **Reviews**, open a review, select the phrase or sentence you want to feature, and apply the highlight (using the highlight tool in the review editor). Save the review. Then add that review to your Highlights widget. If you don't highlight any text in a review, nothing from that review will appear in the widget.
{% endhint %}

### Wall

A paginated masonry grid of reviews that automatically updates with your latest feedback. Visitors can browse through pages of reviews. Best for dedicated review pages or when you want to show many testimonials at once.

### Corner

A corner popup that appears on your site after a short delay. Shows a rotating list of hand-selected reviews. Use it to draw attention to feedback without blocking the main content.

### Dynamic Corner

A corner popup that automatically updates to display your latest reviews. Same as Corner, but it pulls new reviews automatically.

{% hint style="info" %}
**Hand-selected vs. dynamic:** Carousel, Marquee, Highlights, and Corner widgets let you pick which reviews to show. Dynamic Carousel, Dynamic Corner, and Wall widgets automatically show your latest reviews based on your filter settings.
{% endhint %}

***

## Creating and Editing Widgets

1. Go to **Widgets** and click **Create Widget** or **Add**.
2. Enter a name and choose a widget type.
3. Click **Create**.
4. You're taken to the builder. The left sidebar has expandable panels for customization; the right side shows a live preview.

Changes appear in real time as you adjust settings. Click **Save** when you're done. Use the desktop and mobile icons in the toolbar to preview how the widget looks on different screen sizes.

{% hint style="success" %}
Use the canvas color picker in the toolbar to preview your widget against a background that matches your site. This helps you see how colors and borders will look in context.
{% endhint %}

***

## Customization Options

The builder sidebar has several expandable panels. The options you see depend on the widget type. Here's what each group controls:

### Design

Describe the look you want in plain language, then click **Apply**. The platform updates appearance settings such as colors, fonts, borders, stars, and layout details to match your description. The live preview refreshes when the new look is ready.

You can ask for an overall style (for example, soft and minimal with gold stars and rounded corners) or a specific tweak (for example, larger text or rounded corners). Overall looks produce a full set of matching design choices. Specific instructions only change what you asked for.

{% hint style="info" %}
Design only changes how the widget looks. It does not change which reviews appear, your filters, or other non-appearance settings. You can still adjust any option manually after applying a look.
{% endhint %}

{% hint style="success" %}
Running Design again with the same description gives you a fresh take on that look, so you can try a few versions and keep the one you like best.
{% endhint %}

If the look cannot be applied, you see an error and your current settings stay as they are. Try again with a clearer description, or adjust the settings by hand.

### Reviews

* **Review** — For Spotlight: pick the single review to display.
* **Reviews** — For Carousel, Marquee, Highlights, and Corner: pick the reviews to display. For Highlights, only reviews where you've manually highlighted text will show excerpts; unhighlighted reviews won't appear.
* **Reviews for Faces** — For Faces: pick which reviews to show customer photos from.

### Layout

* **Alignment** — Left or centered.
* **Review Count** — Show or hide the total number of reviews.
* **Source** — Show or hide where the review came from (e.g., Google, Yelp).
* **Source Position** — Place the source in the footer or next to the avatar.
* **Date** — Show or hide when the review was written.
* **Shorten Review** — Truncate long reviews.
* **Padding** — Spacing around the content.
* **Width** — For Corner: set the popup width.
* **Show on Mobile** — For Corner: show or hide the popup on phones.

### Colors

* **Star Color** — Color of the stars.
* **Text Color** — Color of the text.
* **Background Color** — Color of the background.
* **Border Color** — Color of the border.

### Font

* **Font Family** — System font or Google font.
* **Font Size** — Size in pixels.
* **Font Emphasis** — None, bold, italic, or underline (for Headline).

### Rating

* **Star Display** — Show all stars, show full stars only, or hide stars.
* **Star Size** — Size in pixels.

### Customer

* **Name** — Full name, first name with last initial, initials, or hidden.
* **Avatar** — Show avatar, show only when photo is available, or hide.
* **Customer Position** — Top or bottom of the review card.
* **Company** — Show or hide the company name.

### Border

* **Border Radius** — Corner roundness in pixels.
* **Border Width** — Border thickness in pixels.
* **Drop Shadow** — Show or hide a drop shadow.

### Carousel

* **Autoplay** — Enable or disable automatic rotation.
* **Autoplay Delay** — Seconds between slide transitions.
* **Pagination** — Arrows, dots, or hidden.
* **Max Slides** — How many reviews to show at once on larger screens.

### Animation

* **Delay** — For Corner: seconds to wait before the popup appears.

### Marquee

* **Visible Slides** — How many reviews are visible at once.
* **Duration** — Speed of the scrolling animation.

### Filters

For dynamic widgets (Wall, Dynamic Carousel, Dynamic Corner) and aggregate widgets (Badge, Headline, Faces):

* **Reviews Per Page** — For Wall: how many reviews per page.
* **Maximum Number of Reviews** — Cap total reviews shown. 0 means no limit.
* **Lowest Rating** — Only show reviews with this score or higher.
* **Review Length** — Only show reviews with at least this many characters.
* **Locations** — Show reviews from specific locations.
* **Sources** — Show reviews from specific sources (e.g., Google only).
* **Tags** — Show reviews with specific tags.
* **Include Hidden Reviews** — Show or hide reviews you've marked as hidden.
* **Sort** — For Wall, Dynamic Carousel, and Dynamic Corner: show the newest reviews first, or the most positive reviews first.

### Schema

For Badge and Wall:

* **Schema** — Include or exclude structured data so search engines can show a star rating in search results.
* **Business Type** — LocalBusiness, SoftwareApplication, Product, Service, or Course.
* **Business Name** — Name used in the structured data.

{% hint style="info" %}
Schema markup helps search engines understand your ratings. When enabled, it can lead to star ratings appearing in Google search results. For more on this, see [schema.org AggregateRating](https://schema.org/AggregateRating).
{% endhint %}

***

## Embedding Widgets

Copy the embed code from the builder footer and paste it into your site. The code is a single line—paste it into your HTML or CMS. The widget will appear where you insert it.

**Placement in body:** If you put the code inside the `<body>` tag, the widget appears exactly where it's inserted.

**Placement in head:** If you put the code in the `<head>` tag, the widget renders at the top of the page, just after the opening `<body>` tag. To control where it appears, add a `data-target` attribute and set it to the ID of the element where you want the widget to display.

For example, if you want the widget inside a div with id `widget-container`, add `data-target="widget-container"` to the script tag. The widget will render inside that div.

{% hint style="info" %}
Use the **Embed** option in the Actions menu to open the embed modal. You can choose body or head placement and, for head placement, specify the container ID. The modal shows the correct code for your choice.
{% endhint %}

***

## Widget Settings

Click **Actions** in the builder toolbar and choose **Settings** to open the widget settings:

* **Name** — Change the widget name.
* **Language** — By default, widget text (labels, buttons, etc.) matches the visitor's browser language. You can override this and set a specific language.
* **Allowed Domains** — By default, widgets can be embedded on any website. Add one or more allowed domains in Settings to restrict where the widget can appear. Only approved domains will be able to display your reviews.

{% hint style="warning" %}
If you set allowed domains, the widget will not load on sites that aren't in the list. This helps prevent unauthorized use of your reviews.
{% endhint %}

***

## Publishing and Unpublishing

Widgets can be published or unpublished. Use the **Published** toggle in the builder or on the Widgets list. When published, the widget appears on your site. When unpublished, it's hidden—visitors won't see it, but you can still edit it.

**Business** and **Agency** include unlimited widgets. On plans with a widget limit, new widgets created beyond that limit stay unpublished until you upgrade. You can still build and customize them; they just won't display until you're within your limit and publish them.

***

## Actions

From the builder or the Widgets list:

* **Copy Embed Code** — Open the embed modal to copy the code for your site.
* **Restore to Defaults** — Reset design settings (colors, fonts, layout) to their defaults. Filter settings (reviews, locations, tags) are kept.
* **Settings** — Edit name, language, and allowed domains.
* **Duplicate** — Create a copy of the widget with the same settings.

***

## Tips

{% hint style="success" %}
Combine widgets for different pages. Use a Badge in your footer, a Wall on a dedicated testimonials page, and a Corner in your checkout flow for maximum impact.
{% endhint %}

{% hint style="info" %}
Enable Schema for Badge and Wall widgets if you want star ratings to appear in Google search results. Set the Business Type and Business Name to match your business.
{% endhint %}

{% hint style="info" %}
Use filters to narrow which reviews appear. For example, show only 4- and 5-star reviews, or only reviews from Google or a specific location.
{% endhint %}

{% hint style="info" %}
For the **Highlights** widget, remember to highlight the exact text you want in each review before adding it to the widget. Open each review from **Reviews**, select the phrase or sentence, apply the highlight, and save. The widget displays only that highlighted text.
{% endhint %}

{% hint style="info" %}
The Widgets page is separate from the [Showcase](/platform/showcase). Widgets are embedded on your own site; the Showcase is a dedicated page at its own URL. Both can help build trust and reputation.
{% endhint %}


# AI Tools

Draft review replies and highlights with AI, score review sentiment, preview suggestions, and optional automation.

AI Tools help your customers write reviews, help your team respond to reviews, highlight the best phrases in the reviews you collect, automatically tag reviews, and score how positive or negative written feedback feels. You can access them in your project settings, [here](https://moregoodreviews.com/settings/ai-tools).

Each tool has its own page. The AI Tools index shows a tile for Review Suggestions, Replies, AI Tags, and Highlights, with a status for whether that tool is on and a button to open it.

{% hint style="info" %}
AI features are included on **Business** and **Agency**. If AI options are locked, upgrade your plan.
{% endhint %}

### Setup

Before using AI Tools, add a **Business Description** (at least 50 characters) in **Settings → Project**. The AI uses your project name and this description so suggestions, replies, and highlights fit your industry and brand.

### AI Review Suggestions

AI Review Suggestions help customers get started on a review. The feature is off by default. When a customer selects a 4 or 5 star rating and sees the review field, a **Generate** button appears. Clicking it produces several suggestions they can pick from or edit. The review should still be their own words.

Open **Settings → AI Tools → Review Suggestions** to adjust:

* **Number of Review Suggestions** – Choose how many suggestions to show (1–5). Customers can regenerate to get new options.
* **Maximum Review Length** – Set how long each suggestion can be, from 100 to 500 characters. The default is 250.
* **Language** – Pick from available languages, or let the AI match your customer's browser language.
* **Keywords in Reviews** – Add up to 10 optional words to include when they fit, such as your business name, location, or services.
* **Custom Instructions** – Add your own guidance for the AI (up to 2,000 characters). For example, you might ask it to mention specific services or avoid certain phrases.

To try a sample review suggestion, use **Preview** as described in [Previewing suggestions and replies](#previewing-suggestions-and-replies).

Use the **Review Pages** section to choose which pages show suggestions. Check the pages you want, then click **Save**. You can also turn suggestions on or off for a single page from **Review Pages → Feedback Form**.

The Review Suggestions tile on the AI Tools index shows how many review pages have suggestions on.

{% hint style="warning" %}
Treat suggestions as a starting point. Customers should edit the text so it matches their experience. Do not post a suggestion to Google for them. See [Google Review Guidelines](/platform/google-review-guidelines).
{% endhint %}

{% hint style="info" %}
AI Review Suggestions only appear when customers are writing a review on your page. If they are redirected away after selecting a rating, the button will not show.
{% endhint %}

### AI Replies

AI Replies help you respond to your Google and Facebook reviews quickly. Each reply considers the rating, the tone of the review text, and your past responses. The AI stays friendly and supportive, especially for customers who had a negative experience.

Open **Settings → AI Tools → Replies** to adjust:

* **Tone** – Choose how your replies sound: friendly, formal, empathetic, grateful, enthusiastic, casual, apologetic, informative, or humorous.
* **Language** – Pick from available languages, or let the AI match the customer's language.
* **Keywords in Replies** – Add up to 10 keywords to include when relevant for SEO.
* **Custom Instructions** – Add your own guidance (up to 2,000 characters) so the AI follows your style or priorities.
* **Support Email Address** and **Support Phone Number** – Optional. These are only included in replies to negative reviews, so customers know how to reach you directly.

To try a sample reply, use **Preview** as described in [Previewing suggestions and replies](#previewing-suggestions-and-replies).

{% hint style="info" %}
You can reply publicly to reviews from the Google My Business and Facebook integrations. Any review imported or synced via those integrations can be replied to from the platform, and the reply will appear on your Google or Facebook listing.
{% endhint %}

#### Automate

The **Automate** section on the Replies page turns on automatic posting to your Google and Facebook listings. It is separate from tone, language, and instructions.

* **Disable** – Turn off automatic replies.
* **Enable for positive reviews** – Reply only to positive reviews.
* **Enable for all reviews** – Reply to every review.

When automation is on, you can also set:

* **Delay** – How long to wait after a review is posted before replying: minimal delay, or 3, 6, 12, or 24 hours.
* **Age of Reviews** – Limit which reviews get auto-replies by how old they are. For example, you might only auto-reply to reviews from the last 7, 14, 30, 60, or 90 days. Leave this as "None" to include all reviews regardless of age.

Click **Save** in the Automate section to apply these settings. The Replies tile on the AI Tools index shows whether automation is on, on for positive reviews, or off.

#### Handling of Negative Reviews

For negative reviews, the AI can include your support email or phone number in the reply, inviting customers to contact your support team directly.

### AI Highlights

AI Highlights pick out the best phrases in your positive reviews and color them so they stand out wherever the review is displayed—in widgets, your showcase, and review share images. Skim-friendly highlights help shoppers spot what other customers loved without reading every word, which can lift conversion and SEO.

Only positive reviews (4 or 5 stars) with review text are highlighted. Short and empty reviews are skipped automatically.

Open **Settings → AI Tools → Highlights** to adjust:

* **Highlight Color** – Pick the background color used behind highlighted phrases. Choose from preset shades or enter your own hex value.
* **Custom Instructions** – Add your own guidance for the AI (up to 2,000 characters). For example, you might tell it to favor phrases about service quality, product features, or your brand name.

Use the **Automate** section to turn highlighting on or off for new positive reviews. Once on, new reviews are highlighted automatically as they come in, usually within an hour.

The Highlights tile on the AI Tools index shows whether highlights are on or off.

#### Saving changes

Saving highlight color or instructions applies those settings right away. Changing only the color recolors existing highlights automatically. The AI does not need to run again, so this is fast and free.

When **Enable** is selected, two optional checkboxes appear. These choices are saved.

* **Remove highlights from all reviews** – Strip existing highlights.
* **Regenerate highlights with AI for all positive reviews** – Backfill highlights on existing positive reviews.

You can use both: remove first, then regenerate. Leave both unchecked if you only want highlights applied to reviews going forward. Clear and regenerate run when you turn a checkbox on, or when you enable automation with a checkbox already selected. Saving again with the same boxes checked does not run them again.

{% hint style="info" %}
Changing the highlight color does not regenerate highlights or use any AI credits—it just updates the color of the highlights that already exist.
{% endhint %}

{% hint style="success" %}
Highlight color is part of your visual brand. Pick a shade that contrasts with your widget and showcase backgrounds so the highlighted phrases really pop.
{% endhint %}

### AI Tags

AI Tags automatically apply a review tag when a review matches your instructions. You can manage them from **Settings → AI Tools → AI Tags**, or from **Settings → Tags** using the **AI Tags** tab.

From AI Tools, the list shows only tags that already have AI tagging on. Creating a tag here always makes a review tag with AI tagging enabled, and instructions are required.

You can also turn AI tagging on for an existing review tag in **Settings → Tags**. See [Tags](/platform/projects/tags) for the full tag manager, including customer tags.

The AI Tags tile on the AI Tools index shows how many AI tags you have, or Off if you have none.

### Sentiment

Sentiment scores how strongly the written text of a review feels positive or negative. It looks at the words in the review, not the star rating, so a short "Great!" can score differently from a long, detailed rave even when both are 5 stars.

On the [Reviews](/platform/projects/reviews) page, each review shows a **Sentiment** meter in the table. Hover the meter to see the score out of 100. Reviews with no written text, or reviews that have not been scored yet, show an empty meter.

You can sort the reviews list by sentiment:

* **Most Positive** – Highest scores first
* **Most Negative** – Lowest scores first

New written reviews are scored automatically in the background. There is nothing to turn on or configure for Sentiment.

{% hint style="info" %}
Use **Most Negative** to find harsh written feedback quickly, including critical reviews that still carry a mid or high star rating.
{% endhint %}

### Previewing suggestions and replies

Each of the **AI Review Suggestions** and **AI Replies** pages has its own **Preview** button. Click **Preview** to try that tool without posting anything publicly.

* **AI Review Suggestions** – Pick a maximum length for the sample text, then click **Generate** to see one example of what a customer might see. The sample reflects your saved language, keywords, and custom instructions. If you changed any of those options on the page, click **Save** first so the sample matches your latest choices.
* **AI Replies** – Pick a star rating, optionally type sample review text, then click **Generate** to see an example reply. The sample reflects your saved tone, language, keywords, and custom instructions. Save your page changes first if you want the sample to match what you just edited.

Click **Generate** again for a new sample, or **Cancel** to close the window.

{% hint style="info" %}
Preview is only for testing your settings. Nothing from the preview is published to your review page, your Google or Facebook listing, or anywhere else.
{% endhint %}


# Integrations

Connect your tools to collect reviews, send requests, and get notified when customers leave feedback.

## What integrations do

Integrations connect More Good Reviews with the tools you already use. **Google My Business** is the most important one for most businesses. It keeps your Google reviews in sync with MGR and lets you reply from your dashboard. You can also send review requests through **Stripe** or **HubSpot**, get **Slack** or **Discord** notifications when new reviews arrive, send SMS through **Twilio**, **ClickSend**, **SimpleTexting**, or **TextLink**, and use application connectors such as **Zapier** or **Pabbly** to automate workflows with your customer and review data. To bring in reviews from other sites (for example Facebook or Yelp), see [Importing Reviews](/importing/reviews).

## How to open Integrations

1. Open **Settings** in the sidebar, then click **Integrations**.
2. Use the tabs at the top (**All**, **Reviews**, **CRMs**, **Notifications**, or **SMS**) to focus the list. Click an integration to open its page and connect or manage it.

***

## Review Integrations

These integrations bring reviews into your project from external sites. Once connected, reviews sync automatically so you can manage them in one place.

### Google My Business

Google My Business is the most important integration for most businesses. Sync your Google business reviews into MGR. When you connect Google My Business, you choose which business locations to sync. Reviews from those locations are imported and kept up to date. You can also reply to Google reviews directly from MGR.

Once connected, MGR checks for new Google reviews automatically about every four hours, so your dashboard stays up to date without any action from you. You don't need to sync manually for day-to-day use. If you want the latest reviews right away, you can start a sync yourself at any time. See [Connecting, disconnecting, and resyncing](#connecting-disconnecting-and-resyncing) below.

{% hint style="info" %}
Google My Business supports multiple locations. After connecting, select the locations you want to sync. Reviews from unselected locations will not be imported.
{% endhint %}

{% hint style="info" %}
Automatic syncing starts after you connect and select your locations. New reviews usually appear within a few hours. Use a manual sync when you want them sooner.
{% endhint %}

For other review sites and file-based imports, use [Importing Reviews](/importing/reviews).

***

## CRM Integrations

CRM integrations let you send review requests to customers stored in your existing tools. When you connect Stripe or HubSpot, MGR can pull in your customers and send them review request messages at the right time.

### Stripe

Send review requests to your Stripe customers. Connect your Stripe account and MGR will sync your customer list. You can then send review requests by email or SMS to customers after a purchase or charge. This helps you collect feedback and build your reputation right when the experience is fresh.

### HubSpot

Send review requests to your HubSpot contacts. Connect your HubSpot account and MGR will sync your contacts. You can send review requests by email or SMS based on your contact list and workflow. Use this to gather reviews and ratings from leads and customers in your CRM.

{% hint style="success" %}
CRM integrations work best when paired with a [Request Strategy](/platform/request-strategy). Set rules for when to send review requests. For example, after a successful charge or when a contact reaches a certain stage.
{% endhint %}

***

## Notifications (Slack and Discord)

Under the **Notifications** tab, these integrations alert your team when customers leave reviews. New reviews are sent to your Slack channel or Discord server so you can respond quickly and stay on top of feedback.

### Slack

Get notified in Slack when customers review your business. Connect your Slack workspace and choose the channel where you want review notifications to appear. Each new review triggers a message in that channel with the customer’s rating, feedback, and a link to reply.

### Discord

Get notified in Discord when customers review your business. Connect your Discord server and add the MGR bot. New reviews are posted to the channel you select, so your team can see feedback as it comes in and respond from MGR.

***

## SMS Integrations

SMS integrations let you request reviews from customers over text message. You connect your own Twilio, ClickSend, SimpleTexting, or TextLink account and provide your credentials. MGR then sends review request links via SMS as part of your message strategy. You need permission before you text anyone. See [SMS Consent](/sms/sms-consent).

### Twilio

Request reviews from your customers over SMS using Twilio. You’ll need a Twilio account, a phone number, and a messaging service. Add your account credentials in the Twilio integration page. MGR provides a webhook URL to paste into Twilio so delivery status and STOP/unsubscribe requests are handled correctly.

For setup details, see [SMS with Twilio](/sms/sms-with-twilio).

### ClickSend

Request reviews from your customers over SMS using ClickSend. Connect your ClickSend account by adding your credentials in the integration page. MGR will use your account to send review request links when your message strategy triggers an SMS.

For setup details, see [SMS with ClickSend](/sms/sms-with-clicksend).

### SimpleTexting

Request reviews from your customers over SMS using SimpleTexting. Connect your SimpleTexting account by adding your credentials in the integration page. MGR will use your account to send review request links when your message strategy triggers an SMS.

For setup details, see [SMS with SimpleTexting](/sms/sms-with-simpletexting).

### TextLink

Request reviews from your customers over SMS using TextLink. Connect your TextLink account by adding your API key in the integration page. MGR will use your account to send review request links when your message strategy triggers an SMS. TextLink uses your own Android SIM. That does not skip consent or carrier rules. See [SMS Consent](/sms/sms-consent).

For setup details, see [SMS with TextLink](/sms/sms-with-textlink).

***

## Application Connectors

Application connectors let you connect MGR to automation tools so your review and customer data can flow into other apps and back. **Zapier**, **Pabbly**, **Make**, and **Boost.space** each offer their own triggers and actions. What you can automate depends on the connector and how you build the workflow.

### Zapier

**Connect your project.** Copy your **API key** from **Settings > API** in MGR. In Zapier, add the **More Good Reviews** app and sign in with that key when prompted. You only need to connect once per Zapier account for each API key you use.

**Triggers (start a Zap).** Choose **New Review** or **New Customer** as the event that starts your Zap. Zapier checks your project on the schedule you set in Zapier, and the Zap runs when a matching new review or new customer appears.

**Actions (do something in MGR).** Add More Good Reviews steps after your trigger or anywhere else in the same Zap. You can create customers, create reviews, send review requests, look up or list customers, charges, messages, reviews, locations, and other records, and update things like customer tags, review visibility, and replies. Each step name starts with a category (for example **Customers:** or **Reviews:**) so related steps group together in the picker.

**Tags and locations in Zapier.** Fields for tags are labeled **Tags**. The choices list only tags that match the step you are using. Steps that work with customers list the same customer tags you manage under **Tags for Customers** in MGR. Steps that work with reviews list the same review tags you manage under **Tags for Reviews**. Location fields are labeled **Location** and list your locations by the names you gave them in MGR.

{% hint style="info" %}
Some Zap steps that create tags, sources, or links ask for an icon value (sometimes labeled **Sprite**). Enter two lowercase words separated by one space (for example **fab fa-google** or **fas fa-star**), or leave the field empty when you do not need a preset icon. Labels such as **fa-solid fa-star** are not accepted.
{% endhint %}

{% hint style="info" %}
Templates and partner connections are on [More Good Reviews on Zapier](https://zapier.com/apps/more-good-reviews/integrations).
{% endhint %}

### Pabbly

Connect MGR to other tools using Pabbly. Build workflows that run when reviews or messages are created or updated. Use Pabbly to automate how you use your review data across your other systems.

### Make

Connect MGR to Make (formerly Integromat) to automate workflows. Trigger scenarios when reviews or messages are created, and connect to hundreds of apps for custom automation.

### Boost.space

Connect MGR to Boost.space to build automation workflows. Use your review and message data to trigger actions in other tools and keep your systems in sync.

{% hint style="info" %}
Application connectors typically use webhooks or the MGR app in their marketplace. For more control, you can also add [Webhooks](/platform/projects/webhooks) in Settings > API to send events to any URL you choose.
{% endhint %}

***

## Webhooks and API

Beyond the integrations above, you can connect MGR to any system using webhooks or the API.

### Webhooks

Webhooks send events to a URL you provide when something happens in your project, such as when a review is created or updated or when a message is sent. Add webhook URLs in **Settings > API** under the Webhooks section. This is useful for custom dashboards, internal tools, or connecting to systems that are not in the integration list.

For details, see [Webhooks](/platform/projects/webhooks).

### API

Use the MGR API to import customers, send review requests, export reviews, and more. Your project has an API key in **Settings > API**. The API is ideal for developers who want to build custom integrations or automate workflows programmatically.

For details, see [API Reference](/platform/api-reference).

***

## Connecting, disconnecting, and resyncing

**Connect.** From **Settings > Integrations**, open the integration and click **Connect**. You are sent to sign in or approve access. When you finish, you return to MGR and the integration is active.

**Disconnect.** On the integration page, click **Disconnect** at the bottom. Your existing reviews and messages stay in MGR, but that integration stops syncing and stops sending new messages until you connect again.

**Resync.** Integrations such as Google My Business, Stripe, and HubSpot offer **Sync** or **Resync** so you can pull the latest data. Google My Business also syncs on its own about every four hours, so a manual sync is only needed when you want the newest reviews right away. For Google My Business, MGR works through your history until it reaches reviews that are already in your project, so large accounts still get a full load. Sync runs in the background; you may see a status when it finishes.

***

## Tips

{% hint style="success" %}
Combine multiple integrations for the best results. For example, sync reviews from Google, send requests to Stripe customers, and get Slack alerts when new feedback arrives.
{% endhint %}

{% hint style="info" %}
If you have multiple locations, connect Google My Business and select which locations to sync. Reviews will be tagged by location so you can filter and report by store or branch.
{% endhint %}

{% hint style="warning" %}
SMS integrations require your own Twilio, ClickSend, SimpleTexting, or TextLink account. You’ll need to register a phone number and set up your messaging service (or pair an Android gateway for TextLink) before connecting to MGR.
{% endhint %}


# Sharing

Turn reviews into branded images and reusable Share templates for social posts and sites featuring testimonials, ratings, and feedback.

You can turn any review into a shareable image. This is useful for social media posts, website testimonials, email campaigns, or anywhere you want to highlight customer feedback. The image includes the rating, review text, and reviewer details—all styled to match your brand.

### Where to Find It

1. Go to **Reviews** in the sidebar.
2. Click a review to open it.
3. In the review detail panel, click the **Share** icon (image icon) in the actions row.
4. The Share modal opens with a live preview and customization options.

***

### Creating a Share Image

1. Open the Share modal for the review you want to use.
2. Adjust the settings on the left to customize how the image looks. The preview on the right updates as you change options.
3. When you're happy with the result, click **Download**.
4. The image is generated and saved to your device. You can then upload it to social media, add it to your website, or use it in your marketing materials.

{% hint style="info" %}
Share images are ideal for Instagram, Facebook, LinkedIn, and other platforms where visual testimonials help build trust and reputation.
{% endhint %}

***

### Customization Options

The Share modal lets you control every part of the image. Options are grouped into collapsible sections.

#### Size

Choose the aspect ratio:

* **1:1** — Square. Works well for Instagram and general use.
* **4:5** — Portrait. Good for Instagram posts and Pinterest.
* **9:16** — Tall portrait. Suited for Instagram Stories and similar formats.

#### Font

* **Font Family** — Pick a system font or a Google font to match your brand.

#### Header

* **Visibility** — Show or hide the header bar at the top.
* **Text Color** — Color of the header text.
* **Background Color** — Color of the header bar. Defaults to your project's primary color.

#### Rating

* **Visibility** — Show or hide the star rating.
* **Star Color** — Color of the stars.

#### Review

* **Review Text** — The review content. You can edit or shorten it if needed.
* **Text Color** — Color of the review text.
* **Background Color** — Background color of the review area.
* **Source** — Show or hide where the review came from (e.g., Google, Facebook).
* **Date** — Show or hide when the review was written.

#### Customer

* **Name** — How the reviewer's name appears: full name, first name with last initial, initials, or hidden.
* **Company** — Show or hide the company name when available.
* **Avatar** — Show or hide the customer's photo.

{% hint style="success" %}
Use the same colors and fonts as your website or brand guidelines so your share images feel consistent and professional.
{% endhint %}

***

### Share templates

Share templates let you save the look of your review images—size, fonts, colors, and what shows on the image—so you can reuse that style every time you export feedback, ratings, or testimonials. You still pick which review to share each time; the template carries your visual setup and keeps your reputation content on brand.

You manage templates from the same **Share** screen you open from a review. At the top you will see **Templates** next to **Save template** and **Download**.

#### Templates list and defaults

1. Open **Share** on a review.
2. Use the **Templates** control. It lists **None** (your project defaults) and every template you have saved.

When your project already has templates, **Share** opens with your default template applied so the preview matches your usual style right away.

#### Save a new template

1. Adjust the options on the left until the preview looks right (the same sections as in [Customization Options](#customization-options)—size, font, header, rating, review text, customer details).
2. In **Templates**, choose **None** if you want to start from defaults before saving a brand‑new look.
3. Click **Save template**. A new template is created with an automatic name (for example “Share template 1”). You can rename it anytime.

That template stays selected so you can download the current review or keep tweaking.

#### Use a saved template

1. Open **Share** on any review.
2. Open **Templates** and pick the template you want. The preview updates.
3. Edit **Review text** or other fields if you need to shorten or tune the copy for this post.
4. Click **Download** when you are ready.

Choosing **None** again resets the controls to your project’s default starting point and reloads the review text from the review itself.

#### Update or duplicate a template

When a template is selected, **Save template** becomes a menu with two choices:

* **Update template** — Overwrites the selected template with whatever is on screen now (colors, layout options, and the review text in the box). Use this when you have refined the design and want that version to be the new standard.
* **Save template as new** — Saves the current setup as another template and leaves the original unchanged.

{% hint style="info" %}
Updating a template does not change images you already downloaded—only what is stored for the next time you use that template.
{% endhint %}

#### Rename or delete templates

In the **Templates** list, each saved template has its own menu:

* **Rename** — Give the template a name your team will recognize.
* **Delete** — Removes the template permanently.

{% hint style="warning" %}
Deleting a template cannot be undone. If you delete the template that was your default, another saved template becomes the default automatically.
{% endhint %}

{% hint style="success" %}
Create one template per channel or campaign—for example a square layout for Instagram, a tall layout for Stories, and a neutral option for your website—so switching between them is one click.
{% endhint %}

{% hint style="info" %}
Share templates help teams keep reviews, ratings, and customer feedback visually consistent, which strengthens trust and reinforces your brand across social and marketing.
{% endhint %}

***

### Tips

{% hint style="info" %}
Shorter review text often works better on social media. Use the Review Text field to trim or highlight the most impactful part of the feedback.
{% endhint %}

{% hint style="info" %}
The 9:16 format is perfect for Instagram Stories and Reels. Use it to feature a single strong testimonial that fills the screen.
{% endhint %}

{% hint style="success" %}
Share images help you showcase reviews, ratings, and feedback beyond your Showcase and widgets. Use them to strengthen your reputation across all your marketing channels.
{% endhint %}


# Exporting

Export your customers and reviews as CSV files. Download links are sent to your email when the export is ready.

You can export your customers and reviews from MGR as CSV files. Exports run in the background, and a download link is sent to your email when the file is ready. This page explains where to find the export options and what to expect.

### Where to Export

* **Customers** – Go to **Customers** in the sidebar. Use the bulk action menu when you have rows selected, or use **Export All** in the pagination area at the bottom.
* **Reviews** – Go to **Reviews** in the sidebar. Use the bulk action menu when you have rows selected, or use **Export All** in the pagination area at the bottom.

***

### Exporting Customers

1. Go to **Customers**.
2. If you want to export only some customers, select the rows you need using the checkboxes.
3. If you selected rows, choose **Export** from the **Select bulk action** dropdown. If you want to export everyone, click **Export All** in the pagination area.
4. A modal confirms the export and shows the email address where the link will be sent.
5. Click the export button to start the export.

{% hint style="info" %}
The customer export includes all customer fields (name, email, phone, company, location, tags, notes, signup date, and more). Use it for backups, reporting, or moving data to another tool.
{% endhint %}

***

### Exporting Reviews

1. Go to **Reviews**.
2. If you want to export only some reviews, select the rows you need using the checkboxes.
3. If you selected rows, choose **Export** from the **Select bulk action** dropdown. If you want to export all reviews, click **Export All** in the pagination area.
4. A modal confirms the export and shows the email address where the link will be sent.
5. Click the export button to start the export.

{% hint style="info" %}
The review export includes all review data (customer, rating, source, review text, date, and more). Use it for backups, reporting, or sharing feedback with your team.
{% endhint %}

***

### What Happens Next

After you start an export:

* The export runs in the background. You can keep using MGR while it processes.
* You'll see a confirmation message that your export will be ready shortly.
* A download link is sent to the email address of the account you're logged in with.
* Click the link in the email to download the CSV file.

{% hint style="warning" %}
Download links expire after a few days. If the link has expired, start a new export to get a fresh link.
{% endhint %}

***

### Tips

{% hint style="success" %}
Use filters to narrow your list before exporting. For example, filter by location, tag, or date range so you only export the customers or reviews you need.
{% endhint %}

{% hint style="info" %}
Exports are limited to 1,000 records when you select specific rows. To export more than 1,000, use **Export All** instead.
{% endhint %}


# Referral Program

Earn commissions by referring businesses to More Good Reviews, the reputation management platform. Share your link and get paid.

The Referral Program lets you earn money by recommending More Good Reviews to others. When someone signs up using your personal referral link and becomes a paying customer, you earn a commission on every payment they make, for as long as they stay subscribed.

### Where to Find It

Click **Refer & Earn** in the main navigation. The page shows your commission rate, referral stats, your personal link, and tables for referrals, commissions, and payouts.

{% hint style="info" %}
The Refer & Earn page is only available on the main account. If you are a sub-account (for example, an agency client), billing and referrals are managed by the account owner.
{% endhint %}

***

### Key Terms

| Term                | Detail                                                               |
| ------------------- | -------------------------------------------------------------------- |
| Commission rate     | 30% of every payment made by a customer you referred                 |
| Commission type     | Recurring, for the lifetime of the customer's subscription           |
| Attribution         | Last-touch by default (the most recent referral link wins at signup) |
| Attribution window  | 90 days from the relevant link click to signup                       |
| Hold period         | 30 days before a commission is approved                              |
| Minimum payout      | $50.00 approved balance required before a payout is sent             |
| Payout method       | Direct bank deposit                                                  |
| Supported countries | US bank accounts only                                                |
| Self-referral       | Not allowed. You cannot earn a commission on your own account        |

***

### Your Referral Link

Every account has a unique referral link shown on the Refer & Earn page. To share it:

1. Copy your link by clicking it in the box at the top of the page.
2. Paste it into an email, message, or post, or use the share buttons below the link.
3. Choose a platform if you prefer a one-click share. Options include LinkedIn, Facebook, Messenger, WhatsApp, X, Reddit, Threads, and email.

When someone clicks your link and signs up within **90 days**, they are automatically connected to your account. You do not need to do anything else. If they sign up after 90 days, the referral is not attributed to you, even if they originally arrived through your link.

For most accounts, if someone clicks another person's referral link after yours, that more recent link receives credit instead (**last-touch** attribution). The 90-day window is measured from that most recent click.

MGR may assign **first-touch** attribution to specific partners by agreement. Under first-touch, credit goes to the partner whose link was clicked first, even if the customer later clicks another referral link before signing up. The 90-day window is measured from that first click. See the [Referral Program Terms](https://moregoodreviews.com/referral-program-terms) for full details.

{% hint style="info" %}
You cannot earn a commission by signing up using your own referral link.
{% endhint %}

{% hint style="success" %}
More Good Reviews helps businesses collect reviews, manage their reputation, and grow through customer feedback. Your referral link is an easy way to share that value with other business owners.
{% endhint %}

***

### How Commissions Work

When a customer you referred makes a payment, a commission is created for that payment. Each commission moves through three stages:

1. **Pending**. The commission is created when a payment is made. It stays pending for 30 days while it clears.
2. **Approved**. After the 30-day hold, the commission is approved and added to your approved balance.
3. **Paid**. Once your approved balance reaches at least $50.00 and you have a bank account connected, your payout is processed.

If a payment is refunded or reversed, the associated commission is also reversed and removed from your balance.

Your commission rate is shown at the top of the Refer & Earn page alongside your total referrals, pending balance, approved balance, and amount paid to date.

***

### Connecting Your Bank Account

To receive payouts, connect a bank account:

1. Click **Connect Bank** at the top of the Refer & Earn page.
2. Follow the secure setup flow to link your account.
3. When finished, the button changes to **Manage Payout Account**. Use it any time to update your details.

{% hint style="warning" %}
Payouts are currently supported for US bank accounts only.
{% endhint %}

***

### Receiving Payouts

Payouts are sent once your approved balance reaches at least $50.00 and your bank account is connected. You do not need to request a payout. When a payout is processed, it appears in the Payouts section of the Refer & Earn page with the amount and date.

***

### Tracking Your Referrals and Commissions

The Refer & Earn page shows a summary of your recent activity. Click **View All** under the Referrals or Commissions sections to see the full list with pagination.

* **Referrals** shows every person who signed up using your link, when they signed up, and their current billing status (Trial, Subscribed, Canceled, or Trial Expired).
* **Commissions** shows each individual commission with the amount, the date it was earned, the date it becomes eligible for payout, and its current status.
* **Payouts** shows completed and pending payouts with the amount and date.

{% hint style="info" %}
You can read the full [Referral Program Terms](https://moregoodreviews.com/referral-program-terms) at any time. There is also a link at the bottom of the Refer & Earn page.
{% endhint %}


# API Reference

Project API - secret-key automation, live reference, and workflows for reviews, ratings, feedback, customers, and reputation.

If you manage customer reviews, ratings, feedback, and reputation work inside a project, you can connect your own tools and workflows to that project. We call that connection the **Project API**. It is for teams who already use the console and want to **automate project-level work** without doing every customer, review request, location, or tag update by hand.

Think of it as a secure bridge between your systems and one project in the product. The connection does not replace the console; it helps you keep customer records, review requests, reviews, ratings, messages, locations, sources, and tags aligned with the tools your team already uses.

Your project has its own **secret key**. That key lets trusted automation act on behalf of that project only. It is similar in spirit to the agency secret key described in our [Agency API reference](/agencies/api-reference), except the project key is limited to one project instead of every business under an agency.

## The live reference on this page

Below this introduction, the same page includes an **interactive reference** that lists what the Project API can do today: the operations you can perform, how to authenticate, and the shape of each request and response.

{% hint style="info" %}
That reference is generated from our specification and is updated as we expand or adjust the Project API. Rely on it for the current, authoritative picture as details may change from time to time.
{% endhint %}

## What this connection is generally for

Typical uses include **importing and updating customers**, **recording customer activity**, **sending review requests**, **reviewing feedback and ratings**, **organizing locations, sources, and tags**, and **syncing reputation data** into your own reporting or customer tools. The exact actions available at any moment are spelled out in the interactive reference on this page, not duplicated here, so the documentation stays accurate as we ship improvements.

{% hint style="info" %}
This is separate from the agency key. A project key only affects the project where you copied it. An agency key can affect multiple projects under the agency.
{% endhint %}

## Where to find it in the console

1. Open the project you want to connect.
2. Go to **Settings** in the sidebar.
3. Open **API**.
4. You will see the **API key** section with your **secret key** and a control that copies it to your clipboard.

If you do not see **API**, or the section is locked and asks you to upgrade, your current plan may not include project automation. Upgrade or contact support as directed on screen.

{% hint style="success" %}
The **View documentation** button on that screen opens this reference page.
{% endhint %}

## How to obtain and copy your project secret key

You do **not** need to create the key yourself. When your project is created, a secret key is already assigned. To obtain it:

1. Go to **Settings** > **API** as above.
2. Find **Secret key** on the page.
3. Use the copy control so you can paste it only where it belongs (for example, into your own secure automation tool or a password manager your team uses).

Only people who are allowed to manage the project can open this screen. Rotating the key requires permission to change project settings.

{% hint style="warning" %}
Treat the secret key like a password. Anyone who has it can perform the actions the connection allows inside that project. Do not paste it into shared chat, email, or tickets.
{% endhint %}

## Rotating the key (Change)

If a key might have been exposed, you offboard a vendor, or you want a fresh secret:

1. On **Settings** > **API**, choose **Change**.
2. Read the confirmation: rotating the key immediately invalidates the previous secret. Anything still using the old value will stop working until you update it.
3. Choose **Save** to confirm. The page shows your new secret key. Copy it and update every place that stored the old one.

{% hint style="warning" %}
Plan a moment to update every place that stored the old key. Until you do, anything tied to the old secret will fail.
{% endhint %}

## Webhooks

The same **Settings** > **API** area also includes **Webhooks** when your plan includes them. Webhooks let your project send updates to another tool when supported activity happens, so your team can keep review, feedback, customer, and reputation workflows in sync.

## Related documentation

* [Projects](/platform/projects) - project setup and the main project workspace.
* [Customers](/platform/projects/customers) - customer records used for review requests and feedback.
* [Reviews](/platform/projects/reviews) - customer reviews, ratings, and reputation tracking.
* [Agency API reference](/agencies/api-reference) - secret-key automation scoped to an **agency** instead of one project.


# Customers

Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.

## List Customers

> Retrieve project customers with optional search, tag, sort, facet filters, and calendar bounds on a chosen datetime column.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers":{"get":{"tags":["Customers"],"summary":"List Customers","operationId":"listCustomers","description":"Retrieve project customers with optional search, tag, sort, facet filters, and calendar bounds on a chosen datetime column.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"location_id":{"type":"integer","description":"Unique numeric identifier for the location."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"color":{"type":"string","description":"Hex color associated with the resource."},"name":{"type":"string","description":"Display name for this resource."},"first_name":{"type":"string","description":"Customer first name."},"last_name":{"type":"string","description":"Customer last name."},"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"phone_formatted":{"type":"string","description":"Human-readable formatted phone number."},"phone_e164":{"type":"string","description":"Phone number normalized to E.164 format."},"company":{"type":"string","description":"Company or organization name associated with the customer."},"gravatar":{"type":"string","description":"Gravatar image URL for the email address."},"lang":{"type":"string","description":"Preferred language code."},"notes":{"type":"string","description":"Internal notes about the customer."},"charges_count":{"type":"integer","description":"Number of charge records associated with the customer."},"charges_sum":{"type":"integer","description":"Total amount charged to the customer in the smallest currency unit."},"charges_avg":{"type":"integer","description":"Average charge amount for the customer in the smallest currency unit."},"review_link":{"type":"string","description":"Public link used by the customer to leave a review."},"unsubscribe_link":{"type":"string","description":"Link the customer can use to unsubscribe from outreach."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."},"validation":{"type":"object","description":"Mailgun email validation verdict returned by the API; only normalized result and risk fields from the stored payload.","properties":{"result":{"type":"string","nullable":true,"description":"Mailgun address-validation result type when a verdict is stored.","enum":["catch_all","deliverable","do_not_send","undeliverable","unknown"]},"risk":{"type":"string","nullable":true,"description":"Mailgun aggregate risk level when a verdict is stored.","enum":["high","low","medium","unknown"]}}},"is_validated":{"type":"boolean","nullable":true,"description":"Tri-state suitability for outreach after validation—null when no verdict applies, true when the Mailgun result is deliverable, unknown, or catch-all, and false otherwise (including undeliverable and do-not-send)."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."},"signed_up_at":{"type":"integer","description":"Unix timestamp when the customer signed up."},"first_charged_at":{"type":"integer","description":"Unix timestamp of the customer's first charge."},"last_charged_at":{"type":"integer","description":"Unix timestamp of the customer's most recent charge."},"first_asked_at":{"type":"integer","description":"Unix timestamp of the first review request sent to the customer."},"last_asked_at":{"type":"integer","description":"Unix timestamp of the most recent review request sent to the customer."},"first_messaged_at":{"type":"integer","description":"Unix timestamp of the first message sent to the customer."},"last_messaged_at":{"type":"integer","description":"Unix timestamp of the most recent message sent to the customer."},"first_reviewed_at":{"type":"integer","description":"Unix timestamp of the customer's first review."},"last_reviewed_at":{"type":"integer","description":"Unix timestamp of the customer's most recent review."},"unsubscribed_at":{"type":"string","description":"Unix timestamp when the customer unsubscribed, if applicable.","nullable":true},"archived_at":{"type":"string","description":"Unix timestamp when the customer was archived, if applicable.","nullable":true},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"photo":{"type":"object","description":"Customer profile image from ImageTransformer when present; omitted in JSON when the customer has no photo.","nullable":true,"properties":{"id":{"type":"integer","description":"Unique numeric identifier for the image record."},"link":{"type":"string","description":"Resolved CDN or app URL for the image asset."},"uuid":{"type":"string","description":"Stable UUID for the image record."}}}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},{"name":"date_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Customer datetime column paired with date_from and date_to (defaults to created_at when omitted).","enum":["archived_at","created_at","last_asked_at","last_charged_at","last_messaged_at","last_reviewed_at","signed_up_at","unsubscribed_at"]},"description":"Customer datetime column paired with date_from and date_to (defaults to created_at when omitted)."},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},{"name":"email","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Email address for the person or customer."},"description":"Email address for the person or customer."},{"name":"filter","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Customer list facet aligned with console filters (excluding archived unless requested).","enum":["archived","asked","has-charges","has-notes","missed","not-asked","not-messaged","not-reviewed","reviewed","unsubscribed"]},"description":"Filter customers by lifecycle, engagement, or archive state."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return."},"description":"Maximum number of records to return."},{"name":"q","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Search query used to filter results."},"description":"Query."},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Sort direction: asc or desc.","enum":["asc","desc"]},"description":"Sort direction: asc or desc."},{"name":"sort_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Customer field to sort by.","enum":["first_name","last_name","email","company","created_at","signed_up_at","last_asked_at","last_messaged_at","last_reviewed_at"]},"description":"Customer field to sort by."},{"name":"tag_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"URL-friendly identifier for the customer tag."},"description":"Filter customers by tag slug."}]}}}}
```

## Create Customer

> Create a customer record with contact, location, and tag details.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"ProjectApiDateTimeInput":{"description":"Optional instant for request bodies: Unix timestamp as integer (seconds), or a date/time string of at most\n50 characters that PHP Carbon can parse. For strings, ISO-8601 / RFC 3339 (for example 2026-04-28T15:30:00Z) is the\nrecommended format in examples and client integrations. Invalid values fail validation. When the field is omitted\nor null, the API uses the current server time where that behavior is documented on the operation.","nullable":true,"oneOf":[{"type":"integer","description":"Unix timestamp in seconds since the Unix epoch."},{"type":"string","maxLength":50,"description":"Date/time string parseable by Carbon; prefer ISO-8601 / RFC 3339; maximum 50 characters."}]}}},"paths":{"/customers":{"post":{"tags":["Customers"],"summary":"Create Customer","operationId":"createCustomer","description":"Create a customer record with contact, location, and tag details.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"location_id":{"type":"integer","description":"Unique numeric identifier for the location."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"color":{"type":"string","description":"Hex color associated with the resource."},"name":{"type":"string","description":"Display name for this resource."},"first_name":{"type":"string","description":"Customer first name."},"last_name":{"type":"string","description":"Customer last name."},"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"phone_formatted":{"type":"string","description":"Human-readable formatted phone number."},"phone_e164":{"type":"string","description":"Phone number normalized to E.164 format."},"company":{"type":"string","description":"Company or organization name associated with the customer."},"gravatar":{"type":"string","description":"Gravatar image URL for the email address."},"lang":{"type":"string","description":"Preferred language code."},"notes":{"type":"string","description":"Internal notes about the customer."},"charges_count":{"type":"integer","description":"Number of charge records associated with the customer."},"charges_sum":{"type":"integer","description":"Total amount charged to the customer in the smallest currency unit."},"charges_avg":{"type":"integer","description":"Average charge amount for the customer in the smallest currency unit."},"review_link":{"type":"string","description":"Public link used by the customer to leave a review."},"unsubscribe_link":{"type":"string","description":"Link the customer can use to unsubscribe from outreach."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."},"validation":{"type":"object","description":"Mailgun email validation verdict returned by the API; only normalized result and risk fields from the stored payload.","properties":{"result":{"type":"string","nullable":true,"description":"Mailgun address-validation result type when a verdict is stored.","enum":["catch_all","deliverable","do_not_send","undeliverable","unknown"]},"risk":{"type":"string","nullable":true,"description":"Mailgun aggregate risk level when a verdict is stored.","enum":["high","low","medium","unknown"]}}},"is_validated":{"type":"boolean","nullable":true,"description":"Tri-state suitability for outreach after validation—null when no verdict applies, true when the Mailgun result is deliverable, unknown, or catch-all, and false otherwise (including undeliverable and do-not-send)."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."},"signed_up_at":{"type":"integer","description":"Unix timestamp when the customer signed up."},"first_charged_at":{"type":"integer","description":"Unix timestamp of the customer's first charge."},"last_charged_at":{"type":"integer","description":"Unix timestamp of the customer's most recent charge."},"first_asked_at":{"type":"integer","description":"Unix timestamp of the first review request sent to the customer."},"last_asked_at":{"type":"integer","description":"Unix timestamp of the most recent review request sent to the customer."},"first_messaged_at":{"type":"integer","description":"Unix timestamp of the first message sent to the customer."},"last_messaged_at":{"type":"integer","description":"Unix timestamp of the most recent message sent to the customer."},"first_reviewed_at":{"type":"integer","description":"Unix timestamp of the customer's first review."},"last_reviewed_at":{"type":"integer","description":"Unix timestamp of the customer's most recent review."},"unsubscribed_at":{"type":"string","description":"Unix timestamp when the customer unsubscribed, if applicable.","nullable":true},"archived_at":{"type":"string","description":"Unix timestamp when the customer was archived, if applicable.","nullable":true},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"photo":{"type":"object","description":"Customer profile image from ImageTransformer when present; omitted in JSON when the customer has no photo.","nullable":true,"properties":{"id":{"type":"integer","description":"Unique numeric identifier for the image record."},"link":{"type":"string","description":"Resolved CDN or app URL for the image asset."},"uuid":{"type":"string","description":"Stable UUID for the image record."}}},"location":{"type":"object","description":"Location for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"code":{"type":"string","description":"Short code or application-level status code for this resource."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}},"tags":{"type":"array","description":"Maximum or current allowance for tag records.","items":{"type":"object","description":"Maximum or current allowance for tag records.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."}}}}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"first_name":{"type":"string","description":"Customer first name."},"last_name":{"type":"string","description":"Customer last name."},"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"photo_url":{"type":"string","format":"uri","maxLength":500,"description":"Public image URL downloaded and stored as the customer photo before the record is created. Returns 400 if the URL cannot be fetched or is not a valid image."},"company":{"type":"string","description":"Company or organization name associated with the customer."},"location_slug":{"type":"string","description":"Slug of an existing project location. Returns 404 if the slug is not found."},"signed_up_at":{"$ref":"#/components/schemas/ProjectApiDateTimeInput"},"notes":{"type":"string","description":"Internal notes about the customer."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."},"tag_slugs":{"type":"array","description":"Tag slugs to attach to the customer.","items":{"type":"string","description":"Tag slugs to attach to the customer."}}},"required":["first_name"]}}}}}}}}
```

## Get Customer

> Retrieve one customer belonging to the authenticated project with nested location and tags where present.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}":{"get":{"tags":["Customers"],"summary":"Get Customer","operationId":"getCustomer","description":"Retrieve one customer belonging to the authenticated project with nested location and tags where present.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false},"description":"Unique numeric identifier for the customer."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"object","description":"Customer record with optional nested entities."}}}}}}}}}}}
```

## Delete Customer

> Delete a customer from the authenticated project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}":{"delete":{"tags":["Customers"],"summary":"Delete Customer","operationId":"deleteCustomer","description":"Delete a customer from the authenticated project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}]}}}}
```

## Archive Customer

> Archive a customer and cancel any unsent outreach messages.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/archive":{"put":{"tags":["Customers"],"summary":"Archive Customer","operationId":"archiveCustomer","description":"Archive a customer and cancel any unsent outreach messages.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}]}}}}
```

## Unarchive Customer

> Restore an archived customer so asks and integrations treat them as active again.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/unarchive":{"put":{"tags":["Customers"],"summary":"Unarchive Customer","operationId":"unarchiveCustomer","description":"Restore an archived customer so asks and integrations treat them as active again.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}]}}}}
```

## Update Customer Photo

> Download a public image URL and store it as the customer photo, or pass null to remove the existing photo. Returns the stored image on set, or an empty success payload when cleared. Returns 400 if a URL cannot be fetched or is not a valid image.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/photo":{"put":{"tags":["Customers"],"summary":"Update Customer Photo","operationId":"updateCustomerPhoto","description":"Download a public image URL and store it as the customer photo, or pass null to remove the existing photo. Returns the stored image on set, or an empty success payload when cleared. Returns 400 if a URL cannot be fetched or is not a valid image.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body with a public image URL for the customer photo, or null to clear it.","properties":{"url":{"type":"string","format":"uri","nullable":true,"maxLength":500,"description":"Public image URL downloaded and stored as the customer photo. Pass null to remove the photo. Returns 400 if a URL cannot be fetched or is not a valid image."}},"required":["url"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"object","description":"Stored customer photo image returned when a URL is provided.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this image."},"uuid":{"type":"string","description":"Stable UUID for this image."},"link":{"type":"string","description":"Public URL for this image."}}}}}}}}}}}}}
```

## Update Customer Notes

> Replace the internal notes stored on a customer.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/notes":{"put":{"tags":["Customers"],"summary":"Update Customer Notes","operationId":"updateCustomerNotes","description":"Replace the internal notes stored on a customer.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body containing customer notes.","properties":{"notes":{"type":"string","nullable":true,"maxLength":5000,"description":"Internal notes about the customer."}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Unsubscribe Customer

> Unsubscribe a customer from future outreach and cancel unsent messages.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/unsubscribe":{"put":{"tags":["Customers"],"summary":"Unsubscribe Customer","operationId":"unsubscribeCustomer","description":"Unsubscribe a customer from future outreach and cancel unsent messages.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}]}}}}
```

## Resubscribe Customer

> Clear message opt-out state so outreach can resume for this customer again.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/resubscribe":{"put":{"tags":["Customers"],"summary":"Resubscribe Customer","operationId":"resubscribeCustomer","description":"Clear message opt-out state so outreach can resume for this customer again.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}]}}}}
```

## Cancel Customer Unsent Messages

> Clear scheduled outreach for this customer without archiving or changing subscription state.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/cancel-unsent-messages":{"put":{"tags":["Customers"],"summary":"Cancel Customer Unsent Messages","operationId":"cancelCustomerUnsentMessages","description":"Clear scheduled outreach for this customer without archiving or changing subscription state.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."}]}}}}
```

## List Customer Charges

> Paginated revenue-charge history for one customer after ingest from billing systems.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/charges":{"get":{"tags":["Customers"],"summary":"List Customer Charges","operationId":"listCustomerCharges","description":"Paginated revenue-charge history for one customer after ingest from billing systems.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Charge rows newest-first by charged-at timestamp.","items":{"type":"object","description":"Stored charge tied to this customer.","properties":{"amount":{"type":"integer","description":"Charge amount in the smallest currency unit."},"charged_at":{"type":"string","description":"RFC3339 timestamp when the charge occurred.","nullable":true},"currency":{"type":"string","description":"Three-letter ISO currency code.","nullable":true},"customer_id":{"type":"integer","description":"Unique numeric identifier for the customer who owns this charge."},"id":{"type":"integer","description":"Unique numeric identifier for this charge row."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project this charge belongs to.","nullable":true}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the customer."},"description":"Unique numeric identifier for the customer."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return per page."},"description":"Maximum number of records to return per page."}]}}}}
```

## List Customer Messages

> Retrieve message history for one customer in the project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/customers/{id}/messages":{"get":{"tags":["Customers"],"summary":"List Customer Messages","operationId":"listCustomerMessages","description":"Retrieve message history for one customer in the project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"ask_id":{"type":"integer","description":"Ask id for this resource."},"channel":{"type":"string","description":"Channel for this resource."},"failed_reason":{"type":"string","description":"Failed reason for this resource.","nullable":true},"scheduled_at":{"type":"integer","description":"Scheduled at for this resource."},"processed_at":{"type":"integer","description":"Processed at for this resource."},"sent_at":{"type":"integer","description":"Unix timestamp when the message was sent."},"delivered_at":{"type":"integer","description":"Delivered at for this resource."},"opened_at":{"type":"integer","description":"Opened at for this resource."},"clicked_at":{"type":"string","description":"Clicked at for this resource.","nullable":true},"failed_at":{"type":"string","description":"Failed at for this resource.","nullable":true},"complained_at":{"type":"string","description":"Complained at for this resource.","nullable":true},"canceled_at":{"type":"string","description":"Canceled at for this resource.","nullable":true},"halted_at":{"type":"string","description":"Halted at for this resource.","nullable":true},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"customer":{"type":"object","description":"Customer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."},"gravatar":{"type":"string","description":"Gravatar image URL for the email address."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."},"unsubscribed_at":{"type":"string","description":"Unix timestamp when the customer unsubscribed, if applicable.","nullable":true}}},"template":{"type":"object","description":"Template for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"channel":{"type":"string","description":"Channel for this resource."}}}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this resource."},"description":"Unique numeric identifier for this resource."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return."},"description":"Maximum number of records to return."}]}}}}
```

## List Customer Reviews

> Retrieve review history for one customer in the project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/customers/{id}/reviews":{"get":{"tags":["Customers"],"summary":"List Customer Reviews","operationId":"listCustomerReviews","description":"Retrieve review history for one customer in the project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"score":{"type":"integer","description":"Score for this resource."},"review":{"type":"string","description":"Review for this resource."},"review_html":{"type":"string","description":"Review html for this resource."},"reply":{"type":"string","description":"Reply text associated with the review or message."},"is_hidden":{"type":"boolean","description":"Is hidden for this resource."},"is_duplicate":{"type":"boolean","description":"Is duplicate for this resource."},"has_highlights":{"type":"boolean","description":"Has highlights for this resource."},"can_reply":{"type":"boolean","description":"Can reply for this resource."},"has_reply":{"type":"boolean","description":"Has reply for this resource."},"external_url":{"type":"string","description":"External url for this resource."},"platform_url":{"type":"string","description":"Absolute URL to this review in the web console; uses the agency white-label host when configured."},"replied_at":{"type":"integer","description":"Unix timestamp when a reply was posted."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"customer":{"type":"object","description":"Customer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."}}},"location":{"type":"object","description":"Location for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}},"rating":{"type":"object","description":"Numeric rating value for the review.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"score":{"type":"integer","description":"Score for this resource."},"label":{"type":"string","description":"Label for this resource."}}},"reviewer":{"type":"object","description":"Reviewer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"photo_url":{"type":"string","description":"Photo url for this resource."}}},"source":{"type":"object","description":"Source system or review platform for this record.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","description":"Icon for this resource.","nullable":true}}},"fields":{"type":"array","description":"List of fields for this resource.","items":{"type":"object","description":"Fields for this resource.","properties":{"name":{"type":"string","description":"Display name for this resource."},"value":{"type":"string","description":"Stored value for this field."}}}},"tags":{"type":"array","description":"Maximum or current allowance for tag records.","items":{"type":"object","description":"Maximum or current allowance for tag records.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."}}}}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this resource."},"description":"Unique numeric identifier for this resource."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return."},"description":"Maximum number of records to return."}]}}}}
```

## Update Customer Tags

> Replace the tag assignments for a customer using the provided slug list.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Project customer records, nested outreach history, and lifecycle changes for integrations that sync people or dashboards.","name":"Customers"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/customers/{id}/tags":{"put":{"tags":["Customers"],"summary":"Update Customer Tags","operationId":"updateCustomerTags","description":"Replace the tag assignments for a customer using the provided slug list.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body listing tag slugs to apply; omitting unrelated tags removes them from the customer.","properties":{"tag_slugs":{"type":"array","description":"Tag slugs to assign; send an empty array to clear all tags from this customer.","items":{"type":"string","description":"Project tag slug."}}},"required":["tag_slugs"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"Unique numeric identifier for the customer."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"object","description":"Customer record with assigned tags.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this customer."},"uuid":{"type":"string","description":"Stable UUID for this customer."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"name":{"type":"string","description":"Customer display name."},"first_name":{"type":"string","description":"Customer first name."},"last_name":{"type":"string","nullable":true,"description":"Customer last name."},"email":{"type":"string","description":"Customer email address."},"phone":{"type":"string","nullable":true,"description":"Customer phone number."},"company":{"type":"string","nullable":true,"description":"Company or organization associated with the customer."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."},"tags":{"type":"array","description":"Customer tags assigned to this customer.","items":{"type":"object","description":"Project tag metadata.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this tag."},"uuid":{"type":"string","description":"Stable UUID for this tag."},"name":{"type":"string","description":"Display name for this tag."},"slug":{"type":"string","description":"URL-friendly identifier for this tag."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with this tag."},"context":{"type":"string","description":"Resource type this tag applies to.","enum":["review","customer"]},"ai_instructions":{"type":"string","nullable":true,"description":"Instructions used by AI tagging for review tags."},"has_ai_tagging":{"type":"boolean","description":"Whether AI tagging is enabled for this tag."}}}}}}}}}}}}}}}}
```


# Asks

## Create Ask

> Schedule review request outreach through configured email or SMS channels.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Asks"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"ProjectApiDateTimeInput":{"description":"Optional instant for request bodies: Unix timestamp as integer (seconds), or a date/time string of at most\n50 characters that PHP Carbon can parse. For strings, ISO-8601 / RFC 3339 (for example 2026-04-28T15:30:00Z) is the\nrecommended format in examples and client integrations. Invalid values fail validation. When the field is omitted\nor null, the API uses the current server time where that behavior is documented on the operation.","nullable":true,"oneOf":[{"type":"integer","description":"Unix timestamp in seconds since the Unix epoch."},{"type":"string","maxLength":50,"description":"Date/time string parseable by Carbon; prefer ISO-8601 / RFC 3339; maximum 50 characters."}]}}},"paths":{"/asks":{"post":{"tags":["Asks"],"summary":"Create Ask","operationId":"createAsk","description":"Schedule review request outreach through configured email or SMS channels.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"scheduled_at":{"type":"string","description":"Scheduled at for this resource."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"channels":{"type":"array","description":"Delivery channels to use for the request.","items":{"type":"string","description":"Delivery channels to use for the request.","enum":["email","sms"]}},"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"reminders_count":{"type":"integer","description":"Number of reminder messages to send after the initial request."},"asked_at":{"$ref":"#/components/schemas/ProjectApiDateTimeInput"}},"required":["channels"]}}}}}}}}
```


# Charges

## List Charges

> Paginated revenue charge rows for the authenticated project with optional calendar bounds on charged-at times.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Charges"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/charges":{"get":{"tags":["Charges"],"summary":"List Charges","operationId":"listCharges","description":"Paginated revenue charge rows for the authenticated project with optional calendar bounds on charged-at times.","parameters":[{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive lower calendar date for filtering charges by charged-at time (YYYY-MM-DD)."},"description":"Inclusive lower calendar date for filtering charges by charged-at time (YYYY-MM-DD)."},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive upper calendar date for filtering charges by charged-at time (YYYY-MM-DD). Must be on or after date_from when both are provided."},"description":"Inclusive upper calendar date for filtering charges by charged-at time (YYYY-MM-DD)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return per page."},"description":"Maximum number of records to return per page."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Charge rows ordered by most recent charged-at time.","items":{"type":"object","description":"Stored charge belonging to this project.","properties":{"amount":{"type":"integer","description":"Charge amount in the smallest currency unit."},"charged_at":{"type":"string","description":"RFC3339 timestamp when the charge occurred.","nullable":true},"currency":{"type":"string","description":"Three-letter ISO currency code.","nullable":true},"customer_id":{"type":"integer","description":"Unique numeric identifier for the customer who owns this charge."},"id":{"type":"integer","description":"Unique numeric identifier for this charge row."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project this charge belongs to.","nullable":true}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}}}}}}
```

## Create Charge

> Record a customer revenue event from an external billing system.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Charges"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"ProjectApiDateTimeInput":{"description":"Optional instant for request bodies: Unix timestamp as integer (seconds), or a date/time string of at most\n50 characters that PHP Carbon can parse. For strings, ISO-8601 / RFC 3339 (for example 2026-04-28T15:30:00Z) is the\nrecommended format in examples and client integrations. Invalid values fail validation. When the field is omitted\nor null, the API uses the current server time where that behavior is documented on the operation.","nullable":true,"oneOf":[{"type":"integer","description":"Unix timestamp in seconds since the Unix epoch."},{"type":"string","maxLength":50,"description":"Date/time string parseable by Carbon; prefer ISO-8601 / RFC 3339; maximum 50 characters."}]}}},"paths":{"/charges":{"post":{"tags":["Charges"],"summary":"Create Charge","operationId":"createCharge","description":"Record a customer revenue event from an external billing system.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"amount":{"type":"integer","description":"Charge amount in the smallest currency unit."},"currency":{"type":"string","description":"Three-letter ISO currency code."},"charged_at":{"type":"string","description":"Timestamp or date when the charge occurred."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"amount":{"type":"integer","description":"Charge amount in the smallest currency unit."},"email":{"type":"string","description":"Email address for the person or customer."},"phone":{"type":"string","description":"Phone number for the person or customer."},"currency":{"type":"string","description":"Three-letter ISO currency code."},"location_slug":{"type":"string","description":"Slug of an existing project location. Returns 404 if the slug is not found."},"charged_at":{"$ref":"#/components/schemas/ProjectApiDateTimeInput"}},"required":["amount"]}}}}}}}}
```

## Delete Charge

> Permanently remove a mistaken charge row scoped to this project’s customers.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Charges"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/charges/{id}":{"delete":{"tags":["Charges"],"summary":"Delete Charge","operationId":"deleteCharge","description":"Permanently remove a mistaken charge row scoped to this project’s customers.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object confirming the charge row was deleted.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```


# Locations

## List Locations

> Retrieve every active location on the project for slug references or reconciliation with upstream systems.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Locations"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/locations":{"get":{"tags":["Locations"],"summary":"List Locations","operationId":"listLocations","description":"Retrieve every active location on the project for slug references or reconciliation with upstream systems.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Locations belonging to this project.","items":{"type":"object","description":"Location record for this project.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline derived from display fields."},"address":{"type":"string","description":"Single-line formatted mailing address when present."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}}}}}}}}}}}}}
```

## Create Location

> Create a physical or business location for the project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Locations"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/locations":{"post":{"tags":["Locations"],"summary":"Create Location","operationId":"createLocation","description":"Create a physical or business location for the project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}},"required":["name"]}}}}}}}}
```

## Get Location

> Retrieve a single project location for display slug or reconciliation use.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Locations"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/locations/{id}":{"get":{"tags":["Locations"],"summary":"Get Location","operationId":"getLocation","description":"Retrieve a single project location for display slug or reconciliation use.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"object","description":"Location record for this project."}}}}}}}}}}}
```

## Update Location

> Update public display and address details for a project location.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Locations"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/locations/{id}":{"put":{"tags":["Locations"],"summary":"Update Location","operationId":"updateLocation","description":"Update public display and address details for a project location.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}}}}}}}}}
```

## Delete Location

> Remove a project location owned by the authenticated project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Locations"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/locations/{id}":{"delete":{"tags":["Locations"],"summary":"Delete Location","operationId":"deleteLocation","description":"Remove a project location owned by the authenticated project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Confirms the location was deleted.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```


# Messages

## List Messages

> Retrieve recent project outreach messages for reporting or auditing with optional calendar bounds on a chosen message datetime column.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Messages"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/messages":{"get":{"tags":["Messages"],"summary":"List Messages","operationId":"listMessages","description":"Retrieve recent project outreach messages for reporting or auditing with optional calendar bounds on a chosen message datetime column.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"ask_id":{"type":"integer","description":"Ask id for this resource."},"channel":{"type":"string","description":"Channel for this resource."},"failed_reason":{"type":"string","description":"Failed reason for this resource.","nullable":true},"scheduled_at":{"type":"integer","description":"Scheduled at for this resource."},"processed_at":{"type":"integer","description":"Processed at for this resource."},"sent_at":{"type":"integer","description":"Unix timestamp when the message was sent."},"delivered_at":{"type":"integer","description":"Delivered at for this resource."},"opened_at":{"type":"integer","description":"Opened at for this resource."},"clicked_at":{"type":"string","description":"Clicked at for this resource.","nullable":true},"failed_at":{"type":"string","description":"Failed at for this resource.","nullable":true},"complained_at":{"type":"string","description":"Complained at for this resource.","nullable":true},"canceled_at":{"type":"string","description":"Canceled at for this resource.","nullable":true},"halted_at":{"type":"string","description":"Halted at for this resource.","nullable":true},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"customer":{"type":"object","description":"Customer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."},"gravatar":{"type":"string","description":"Gravatar image URL for the email address."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."},"unsubscribed_at":{"type":"string","description":"Unix timestamp when the customer unsubscribed, if applicable.","nullable":true}}},"template":{"type":"object","description":"Template for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"channel":{"type":"string","description":"Channel for this resource."}}}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"channel","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Filter messages by delivery channel.","enum":["email","sms"]},"description":"Filter messages by delivery channel."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},{"name":"date_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Message datetime column paired with date_from and date_to (defaults to created_at when omitted).","enum":["canceled_at","clicked_at","complained_at","delivered_at","failed_at","opened_at","scheduled_at","sent_at"]},"description":"Message datetime column paired with date_from and date_to (defaults to created_at when omitted)."},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},{"name":"template_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Filter messages by template slug prefix."},"description":"Filter messages by template slug prefix."},{"name":"status","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Filter messages by delivery status.","enum":["sent","delivered","opened","clicked","failed","complained","scheduled"]},"description":"Filter messages by delivery status."},{"name":"sort_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Message timestamp field to sort by.","enum":["scheduled_at","sent_at","opened_at","clicked_at"]},"description":"Message timestamp field to sort by."},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Sort direction: asc or desc.","enum":["asc","desc"]},"description":"Sort direction: asc or desc."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return."},"description":"Maximum number of records to return."}]}}}}
```

## Delete Message

> Delete a scheduled or sent outreach message for the authenticated project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Messages"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/messages/{id}":{"delete":{"tags":["Messages"],"summary":"Delete Message","operationId":"deleteMessage","description":"Delete a scheduled or sent outreach message for the authenticated project.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this message."},"description":"Unique numeric identifier for this message."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Confirms the message was deleted and related ask completion was refreshed when applicable.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```


# Reviews

Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.

## List Reviews

> Retrieve project reviews with facet, source, location, score, and tag filters, optional sorting by rating or timestamps, and calendar bounds on a chosen review datetime column.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/reviews":{"get":{"tags":["Reviews"],"summary":"List Reviews","operationId":"listReviews","description":"Retrieve project reviews with facet, source, location, score, and tag filters, optional sorting by rating or timestamps, and calendar bounds on a chosen review datetime column.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"score":{"type":"integer","description":"Score for this resource."},"review":{"type":"string","description":"Review for this resource."},"review_html":{"type":"string","description":"Review html for this resource."},"reply":{"type":"string","description":"Reply text associated with the review or message."},"is_hidden":{"type":"boolean","description":"Is hidden for this resource."},"is_duplicate":{"type":"boolean","description":"Is duplicate for this resource."},"has_highlights":{"type":"boolean","description":"Has highlights for this resource."},"can_reply":{"type":"boolean","description":"Can reply for this resource."},"has_reply":{"type":"boolean","description":"Has reply for this resource."},"external_url":{"type":"string","description":"External url for this resource."},"platform_url":{"type":"string","description":"Absolute URL to this review in the web console; uses the agency white-label host when configured."},"replied_at":{"type":"integer","description":"Unix timestamp when a reply was posted."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"customer":{"type":"object","description":"Customer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."}}},"location":{"type":"object","description":"Location for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}},"rating":{"type":"object","description":"Numeric rating value for the review.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"score":{"type":"integer","description":"Score for this resource."},"label":{"type":"string","description":"Label for this resource."}}},"reviewer":{"type":"object","description":"Reviewer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"photo_url":{"type":"string","description":"Photo url for this resource."}}},"source":{"type":"object","description":"Source system or review platform for this record.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","description":"Icon for this resource.","nullable":true}}},"fields":{"type":"array","description":"List of fields for this resource.","items":{"type":"object","description":"Fields for this resource.","properties":{"name":{"type":"string","description":"Display name for this resource."},"value":{"type":"string","description":"Stored value for this field."}}}},"tags":{"type":"array","description":"Maximum or current allowance for tag records.","items":{"type":"object","description":"Maximum or current allowance for tag records.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."}}}}}}},"pagination":{"type":"object","description":"Pagination metadata for list responses.","properties":{"current_page":{"type":"integer","description":"Current page number in the paginated result set."},"from":{"type":"integer","description":"Index of the first item returned on the current page."},"last_page":{"type":"integer","description":"Last available page number in the paginated result set."},"path":{"type":"string","description":"Base API path used for the paginated result set."},"per_page":{"type":"integer","description":"Number of items returned per page."},"to":{"type":"integer","description":"Index of the last item returned on the current page."},"total":{"type":"integer","description":"Total number of matching items."}}}}}}}}},"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},"description":"Inclusive lower calendar date (YYYY-MM-DD) for the column chosen by date_key, defaulting to created_at when date_key is omitted."},{"name":"date_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Review datetime column paired with date_from and date_to (defaults to created_at when omitted).","enum":["created_at","replied_at","updated_at"]},"description":"Review datetime column paired with date_from and date_to (defaults to created_at when omitted)."},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true,"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},"description":"Inclusive upper calendar date (YYYY-MM-DD) for the column chosen by date_key; must be on or after date_from when both bounds are provided."},{"name":"filter","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Review list facet aligned with console filters (non-duplicates unless duplicate is selected).","enum":["anonymous","duplicate","hidden","identified","native","visible","with-highlights","with-replies","without-replies","written"]},"description":"Filter reviews by visibility, platform, duplication, replies, content, or audience."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Maximum number of records to return."},"description":"Maximum number of records to return."},{"name":"location_id","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Unique numeric identifier for the location."},"description":"Filter reviews by location ID."},{"name":"location_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"URL-friendly identifier for the location."},"description":"Filter reviews by location slug."},{"name":"location_uuid","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Stable UUID for the location."},"description":"Filter reviews by location UUID."},{"name":"score","in":"query","required":false,"schema":{"type":"integer","nullable":true,"minimum":1,"maximum":5,"description":"Numeric rating score for the review."},"description":"Filter reviews by rating score."},{"name":"source_id","in":"query","required":false,"schema":{"type":"integer","nullable":true,"description":"Identifier for the source system or review platform."},"description":"Filter reviews by source ID."},{"name":"source_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Source slug for this resource."},"description":"Filter reviews by source slug."},{"name":"source_uuid","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Source uuid for this resource."},"description":"Filter reviews by source UUID."},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Sort direction applied when sort_key is set (defaults to desc when omitted).","enum":["asc","desc"]},"description":"Sort direction: asc or desc."},{"name":"sort_key","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"Review attribute to sort by; omit to use newest-first by creation time.","enum":["score","replied_at","created_at","updated_at"]},"description":"Review attribute to sort by."},{"name":"tag_slug","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"URL-friendly identifier for the review tag."},"description":"Filter reviews by tag slug."}]}}}}
```

## Create Review

> Create a review for a customer identified by email or phone, creating the customer when needed, with optional source, location, tags, and review date.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."},"ProjectApiDateTimeInput":{"description":"Optional instant for request bodies: Unix timestamp as integer (seconds), or a date/time string of at most\n50 characters that PHP Carbon can parse. For strings, ISO-8601 / RFC 3339 (for example 2026-04-28T15:30:00Z) is the\nrecommended format in examples and client integrations. Invalid values fail validation. When the field is omitted\nor null, the API uses the current server time where that behavior is documented on the operation.","nullable":true,"oneOf":[{"type":"integer","description":"Unix timestamp in seconds since the Unix epoch."},{"type":"string","maxLength":50,"description":"Date/time string parseable by Carbon; prefer ISO-8601 / RFC 3339; maximum 50 characters."}]}}},"paths":{"/reviews":{"post":{"tags":["Reviews"],"summary":"Create Review","operationId":"createReview","description":"Create a review for a customer identified by email or phone, creating the customer when needed, with optional source, location, tags, and review date.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"score":{"type":"integer","description":"Score for this resource."},"review":{"type":"string","description":"Review for this resource."},"review_html":{"type":"string","description":"Review html for this resource."},"reply":{"type":"string","description":"Reply text associated with the review or message."},"is_hidden":{"type":"boolean","description":"Is hidden for this resource."},"is_duplicate":{"type":"boolean","description":"Is duplicate for this resource."},"has_highlights":{"type":"boolean","description":"Has highlights for this resource."},"can_reply":{"type":"boolean","description":"Can reply for this resource."},"has_reply":{"type":"boolean","description":"Has reply for this resource."},"external_url":{"type":"string","description":"External url for this resource."},"platform_url":{"type":"string","description":"Absolute URL to this review in the web console; uses the agency white-label host when configured."},"replied_at":{"type":"integer","description":"Unix timestamp when a reply was posted."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"customer":{"type":"object","description":"Customer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"color":{"type":"string","description":"Hex color associated with the resource."},"platform_url":{"type":"string","description":"Absolute URL to this customer in the web console; uses the agency white-label host when configured."}}},"location":{"type":"object","description":"Location for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"project_id":{"type":"integer","description":"Unique numeric identifier for the project."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"display_name":{"type":"string","description":"Public display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"store_code":{"type":"string","description":"Internal store identifier for this location."},"title":{"type":"string","description":"Title or headline for the resource."},"address":{"type":"string","description":"Address for this resource."},"address1":{"type":"string","description":"Primary street address line."},"address2":{"type":"string","description":"Secondary street address line, such as suite or apartment."},"city":{"type":"string","description":"City for the address."},"state":{"type":"string","description":"State, province, or region for the address."},"postal_code":{"type":"string","description":"Postal or ZIP code for the address."}}},"rating":{"type":"object","description":"Numeric rating value for the review.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"score":{"type":"integer","description":"Score for this resource."},"label":{"type":"string","description":"Label for this resource."}}},"reviewer":{"type":"object","description":"Reviewer for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"photo_url":{"type":"string","description":"Photo url for this resource."}}},"source":{"type":"object","description":"Source system or review platform for this record.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","description":"Icon for this resource.","nullable":true}}},"fields":{"type":"array","description":"List of fields for this resource.","items":{"type":"object","description":"Fields for this resource.","properties":{"name":{"type":"string","description":"Display name for this resource."},"value":{"type":"string","description":"Stored value for this field."}}}},"tags":{"type":"array","description":"Maximum or current allowance for tag records.","items":{"type":"object","description":"Maximum or current allowance for tag records.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."}}}}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Payload for creating a review and optionally finding or creating the customer.","properties":{"first_name":{"type":"string","description":"Customer first name."},"score":{"type":"integer","minimum":1,"maximum":5,"description":"Star rating from 1 to 5."},"last_name":{"type":"string","description":"Customer last name."},"email":{"type":"string","description":"Email address used to find or create the customer."},"phone":{"type":"string","description":"Phone number used to find or create the customer."},"customer_photo_url":{"type":"string","format":"uri","maxLength":500,"description":"Public image URL downloaded and stored as the customer photo before the review is created. Returns 400 if the URL cannot be fetched or is not a valid image."},"company":{"type":"string","description":"Company or organization name associated with the customer."},"review":{"type":"string","maxLength":5000,"description":"Plain-text review body; HTML is derived server-side."},"external_url":{"type":"string","format":"uri","maxLength":500,"description":"Public URL of the review on an external site (for example Google or Yelp)."},"created_at":{"$ref":"#/components/schemas/ProjectApiDateTimeInput"},"location_slug":{"type":"string","maxLength":50,"description":"Slug of an existing project location. Returns 404 if the slug is not found."},"source_slug":{"type":"string","maxLength":50,"description":"Slug of an existing review source. Returns 404 if the slug is not found."},"tag_slugs":{"type":"array","description":"Review tag slugs to assign after create.","items":{"type":"string","maxLength":50,"description":"URL-friendly identifier for a review tag."}}},"required":["first_name","score"]}}}}}}}}
```

## Delete Review

> Remove a review that should no longer be reconciled.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}":{"delete":{"tags":["Reviews"],"summary":"Delete Review","operationId":"deleteReview","description":"Remove a review that should no longer be reconciled.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this resource."},"description":"Unique numeric identifier for this resource."}]}}}}
```

## Update Review Location

> Assign an existing project location to a review by slug. Returns 404 if the location slug is not found.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/location":{"put":{"tags":["Reviews"],"summary":"Update Review Location","operationId":"updateReviewLocation","description":"Assign an existing project location to a review by slug. Returns 404 if the location slug is not found.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body with the location slug to assign.","properties":{"location_slug":{"type":"string","maxLength":50,"description":"Slug of an existing project location. Returns 404 if the slug is not found."}},"required":["location_slug"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this review."},"description":"Unique numeric identifier for this review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Update Review Source

> Assign an existing review source to a review by slug. Returns 404 if the source slug is not found.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/source":{"put":{"tags":["Reviews"],"summary":"Update Review Source","operationId":"updateReviewSource","description":"Assign an existing review source to a review by slug. Returns 404 if the source slug is not found.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body with the source slug to assign.","properties":{"source_slug":{"type":"string","maxLength":50,"description":"Slug of an existing review source. Returns 404 if the slug is not found."}},"required":["source_slug"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this review."},"description":"Unique numeric identifier for this review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Update Review Visibility

> Show or hide a review in public displays.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/flag-hidden":{"put":{"tags":["Reviews"],"summary":"Update Review Visibility","operationId":"updateReviewVisibility","description":"Show or hide a review in public displays.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body containing the desired review visibility flag.","properties":{"is_hidden":{"type":"boolean","description":"Whether this review should be hidden from public displays."}},"required":["is_hidden"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this review."},"description":"Unique numeric identifier for this review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Update Review Duplicate Flag

> Mark whether a review is a duplicate record.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/flag-duplicate":{"put":{"tags":["Reviews"],"summary":"Update Review Duplicate Flag","operationId":"updateReviewDuplicateFlag","description":"Mark whether a review is a duplicate record.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body containing the desired duplicate flag.","properties":{"is_duplicate":{"type":"boolean","description":"Whether this review should be marked as a duplicate."}},"required":["is_duplicate"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for this review."},"description":"Unique numeric identifier for this review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Mark Review Replied

> Set or clear replied\_at when a reply was handled outside the platform without changing stored reply text.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/mark-replied":{"put":{"tags":["Reviews"],"summary":"Mark Review Replied","operationId":"markReviewReplied","description":"Set or clear replied_at when a reply was handled outside the platform without changing stored reply text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body toggling whether the review counts as replied.","properties":{"replied":{"type":"boolean","description":"When true, records the current time as replied_at; when false, clears replied_at."}},"required":["replied"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the review."},"description":"Unique numeric identifier for the review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Reply to Review on Integration

> Publish or replace the business owner's reply on the review's connected platform (such as Google Business Profile or Facebook) using the project's active integration credentials; accepts manual reply text only and does not invoke AI drafting.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/reply":{"put":{"tags":["Reviews"],"summary":"Reply to Review on Integration","operationId":"updateReviewIntegrationReply","description":"Publish or replace the business owner's reply on the review's connected platform (such as Google Business Profile or Facebook) using the project's active integration credentials; accepts manual reply text only and does not invoke AI drafting.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body with the owner reply to send to the third-party review platform API.","properties":{"reply":{"type":"string","description":"Reply text to post or update on the external platform (for example Google or Facebook).","maxLength":4000}},"required":["reply"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the review."},"description":"Unique numeric identifier for the review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Update Review Tags

> Replace the tag assignments for a review using the provided slug list.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/tags":{"put":{"tags":["Reviews"],"summary":"Update Review Tags","operationId":"updateReviewTags","description":"Replace the tag assignments for a review using the provided slug list.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body listing tag slugs to apply; omitting unrelated tags removes them from the review.","properties":{"tag_slugs":{"type":"array","description":"Tag slugs to assign; send an empty array to clear all tags from this review.","items":{"type":"string","description":"Project tag slug."}}},"required":["tag_slugs"]}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"Unique numeric identifier for the review."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response status for the request.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```

## Create Review Share Image

> Render a share-card PNG using optional template styling and aspect ratio, persist the image, and return CDN-backed metadata.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Review records collected for the project across its connected sources; list, moderate, share, tag, mark replied, or remove as integrations require.","name":"Reviews"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/reviews/{id}/share-image":{"post":{"tags":["Reviews"],"summary":"Create Review Share Image","operationId":"createReviewShareImage","description":"Render a share-card PNG using optional template styling and aspect ratio, persist the image, and return CDN-backed metadata.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false},"description":"Unique numeric identifier for the review."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Optionally pick a saved share template and export aspect ratio; send an empty object for built-in defaults at 1:1.","properties":{"ratio":{"type":"string","description":"Export aspect ratio; when set, overrides the ratio saved on the chosen template or the default preset.","enum":["1:1","4:5","9:16"]},"template_id":{"type":"integer","description":"Numeric id of a share template on this project; omit to merge only built-in defaults."}}}}}},"responses":{"200":{"description":"Generated share PNG exposed as Image metadata with a full HTTPS link matching other API image fields.","content":{"application/json":{"schema":{"type":"object","description":"Standard success envelope with ImageTransformer fields flattened into data like other singleton resources.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code mirroring HTTP 200 on success."},"data":{"type":"object","description":"Transformed CDN-backed image backing the PNG share artifact.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for the stored image asset."},"uuid":{"type":"string","description":"Stable UUID for the image asset and cache headers."},"link":{"type":"string","description":"Full HTTPS CDN URL referencing the PNG share card artifact."}},"required":["id","uuid","link"]}},"required":["success","code","data"]}}}}}}}}}
```


# Share Templates

Saved share card layouts for the project; integrations list templates or pair them with reviews for share image generation.

## List Share Templates

> Return every saved share template including default flag and layout settings.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Saved share card layouts for the project; integrations list templates or pair them with reviews for share image generation.","name":"Share Templates"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/share-templates":{"get":{"tags":["Share Templates"],"summary":"List Share Templates","operationId":"listShareTemplates","description":"Return every saved share template including default flag and layout settings.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Paginated-style success wrapper with an array of templates in data.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"array","description":"Saved share templates ordered by name then id.","items":{"type":"object","description":"One share template owned by the authenticated project.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this share template."},"uuid":{"type":"string","description":"Stable UUID for this share template."},"name":{"type":"string","description":"Human-readable name shown when picking a template."},"is_default":{"type":"boolean","description":"Whether this template is the project default when sharing."},"settings":{"type":"object","description":"Share card options such as colors, ratio, and visible blocks.","nullable":true,"properties":{"font_family":{"type":"string","description":"Font family name for card typography."},"header_background_color":{"type":"string","description":"Header bar background color hex value."},"header_text_color":{"type":"string","description":"Header text color hex value."},"name_convention":{"type":"string","description":"Display format for reviewer or customer names.","enum":["full_name","first_name_last_initial","initials","hidden"]},"ratio":{"type":"string","description":"Output aspect ratio for the share PNG.","enum":["1:1","4:5","9:16"]},"review_background_color":{"type":"string","description":"Card body background color hex value."},"review_star_color":{"type":"string","description":"Star tint color hex value when ratings are visible."},"review_text":{"type":"string","nullable":true,"description":"Optional overridden quote text stored on the template."},"review_text_color":{"type":"string","description":"Quote text color hex value."},"show_avatar":{"type":"integer","description":"Whether the author avatar shows when present.","enum":[0,1]},"show_company":{"type":"integer","description":"Whether the organization name shows with the author.","enum":[0,1]},"show_date":{"type":"integer","description":"Whether to show the formatted review date in the footer.","enum":[0,1]},"show_header":{"type":"integer","description":"Whether to show project icon and header bar.","enum":[0,1]},"show_rating":{"type":"integer","description":"Whether to show numeric star rating glyphs.","enum":[0,1]},"show_source":{"type":"integer","description":"Whether to show originating review platform badges.","enum":[0,1]}}},"created_at":{"type":"integer","description":"Unix timestamp when the template was saved."},"updated_at":{"type":"integer","description":"Unix timestamp when template settings last changed."}}}}}}}}}}}}}}
```

## Delete Share Template

> Remove a share template and promote another default when the deleted row was default.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"description":"Saved share card layouts for the project; integrations list templates or pair them with reviews for share image generation.","name":"Share Templates"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/share-templates/{id}":{"delete":{"tags":["Share Templates"],"summary":"Delete Share Template","operationId":"deleteShareTemplate","description":"Remove a share template and promote another default when the deleted row was default.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","nullable":false},"description":"Unique numeric identifier for the share template."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object confirming the share template was deleted.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```


# Sources

## List Sources

> Retrieve review source metadata available for project reviews.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Sources"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/sources":{"get":{"tags":["Sources"],"summary":"List Sources","operationId":"listSources","description":"Retrieve review source metadata available for project reviews.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","description":"Icon for this resource.","nullable":true}}}}}}}}}}}}}}
```

## Create Source

> Create a review source with a display name. The slug is generated from the name. Optional color and sprite class apply when no custom icon image is configured for this source.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Sources"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/sources":{"post":{"tags":["Sources"],"summary":"Create Source","operationId":"createSource","description":"Create a review source with a display name. The slug is generated from the name. Optional color and sprite class apply when no custom icon image is configured for this source.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for creating a review source.","properties":{"name":{"type":"string","maxLength":30,"description":"Display name for this source."},"color":{"type":"string","nullable":true,"maxLength":30,"description":"Hex color badge for this source."},"sprite":{"nullable":true,"description":"Font Awesome icon CSS classes for this source when no custom icon image is set.","allOf":[{"$ref":"#/components/schemas/SpriteClass"}]}},"required":["name"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Review source metadata.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","nullable":true,"description":"Icon for this resource."}}}}}}}}}}}}}
```

## Update Source

> Update display name, slug, color, or sprite class for an existing review source. Sending a sprite while a custom icon image is set returns an error.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Sources"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/sources/{id}":{"put":{"tags":["Sources"],"summary":"Update Source","operationId":"updateSource","description":"Update display name, slug, color, or sprite class for an existing review source. Sending a sprite while a custom icon image is set returns an error.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for updating a review source.","properties":{"name":{"type":"string","maxLength":30,"description":"Display name for this source."},"slug":{"type":"string","nullable":true,"maxLength":30,"description":"URL-friendly identifier unique among sources in this project."},"color":{"type":"string","nullable":true,"maxLength":30,"description":"Hex color badge for this source."},"sprite":{"nullable":true,"description":"Font Awesome icon CSS classes for this source when no custom icon image is set.","allOf":[{"$ref":"#/components/schemas/SpriteClass"}]}},"required":["name"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Review source metadata.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"icon":{"type":"string","nullable":true,"description":"Icon for this resource."}}}}}}}}}}}}}
```

## Delete Source

> Soft-delete a review source when it is no longer used for ingestion or display.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Sources"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/sources/{id}":{"delete":{"tags":["Sources"],"summary":"Delete Source","operationId":"deleteSource","description":"Soft-delete a review source when it is no longer used for ingestion or display.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object confirming the source was deleted.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```


# Tags

## List Tags

> Retrieve project tags used to organize customers and reviews.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Tags"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/tags":{"get":{"tags":["Tags"],"summary":"List Tags","operationId":"listTags","description":"Retrieve project tags used to organize customers and reviews.","parameters":[{"name":"context","in":"query","required":false,"schema":{"type":"string","nullable":true,"description":"When set, only tags for this scope are returned; omit for all tags.","enum":["customer","review"]},"description":"When set, only tags for this scope are returned; omit for all tags."}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with the resource."},"context":{"type":"string","description":"Additional context describing how this resource is used."},"ai_instructions":{"type":"string","description":"Instructions used by AI features for this resource.","nullable":true},"has_ai_tagging":{"type":"boolean","description":"Whether AI tagging is enabled for this resource."}}}}}}}}}}}}}}
```

## Create Tag

> Create a project tag for customer or review organization.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Tags"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/tags":{"post":{"tags":["Tags"],"summary":"Create Tag","operationId":"createTag","description":"Create a project tag for customer or review organization.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for creating a project tag.","properties":{"name":{"type":"string","description":"Display name for this tag."},"color":{"type":"string","nullable":true,"description":"Hex color associated with this tag."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"context":{"type":"string","nullable":true,"description":"Resource type this tag applies to.","enum":["review","customer"]},"ai_instructions":{"type":"string","nullable":true,"description":"Instructions used by AI tagging for review tags."},"has_ai_tagging":{"type":"boolean","nullable":true,"description":"Whether AI tagging is enabled for this tag."}},"required":["name"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"object","description":"Project tag metadata.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this tag."},"uuid":{"type":"string","description":"Stable UUID for this tag."},"name":{"type":"string","description":"Display name for this tag."},"slug":{"type":"string","description":"URL-friendly identifier for this tag."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with this tag."},"context":{"type":"string","description":"Resource type this tag applies to.","enum":["review","customer"]},"ai_instructions":{"type":"string","nullable":true,"description":"Instructions used by AI tagging for review tags."},"has_ai_tagging":{"type":"boolean","description":"Whether AI tagging is enabled for this tag."}}}}}}}}}}}}}
```

## Update Tag

> Rename, recolor, or adjust slug and AI tagging settings for an existing workspace tag.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Tags"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}},"schemas":{"SpriteClass":{"type":"string","maxLength":50,"pattern":"^(fab|fad|fak|fal|far|fas|fat)\\s+fa-[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Font Awesome icon: two CSS class names as used with Font Awesome Web Fonts / classic CSS (not SVG/React props).\nFormat is a style prefix (`fab`, `fad`, `fak`, `fal`, `far`, `fas`, or `fat`), one ASCII space, then an icon slug\nstarting with `fa-` (lowercase letters and digits, hyphen-separated words). Examples: `fab fa-google`, `fas fa-star`.\nOn write, omit, send null, or whitespace-only to clear. Font Awesome 6 semantic pairs such as `fa-solid fa-star`\nare not accepted; use `fas fa-star` instead."}}},"paths":{"/tags/{id}":{"put":{"tags":["Tags"],"summary":"Update Tag","operationId":"updateTag","description":"Rename, recolor, or adjust slug and AI tagging settings for an existing workspace tag.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for updating a project tag.","properties":{"name":{"type":"string","description":"Display name for this tag."},"slug":{"type":"string","nullable":true,"maxLength":30,"description":"Stable URL-safe slug override; must remain unique among project tags when provided."},"color":{"type":"string","nullable":true,"description":"Hex color associated with this tag."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"ai_instructions":{"type":"string","nullable":true,"description":"Instructions used by AI tagging for review tags when has_ai_tagging is true."},"has_ai_tagging":{"type":"boolean","nullable":true,"description":"Whether AI tagging is enabled for this tag on review-context tags."}},"required":["name"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."},"data":{"type":"object","description":"Project tag metadata.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this tag."},"uuid":{"type":"string","description":"Stable UUID for this tag."},"name":{"type":"string","description":"Display name for this tag."},"slug":{"type":"string","description":"URL-friendly identifier for this tag."},"sprite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SpriteClass"}]},"color":{"type":"string","description":"Hex color associated with this tag."},"context":{"type":"string","description":"Resource type this tag applies to.","enum":["review","customer"]},"ai_instructions":{"type":"string","nullable":true,"description":"Instructions used by AI tagging for review tags."},"has_ai_tagging":{"type":"boolean","description":"Whether AI tagging is enabled for this tag."}}}}}}}}}}}}}
```

## Delete Tag

> Soft-delete a workspace tag shared across customers and reviews.

```json
{"openapi":"3.0.3","info":{"title":"MGR Project API","version":"1.0.0"},"tags":[{"name":"Tags"}],"servers":[{"url":"https://api.moregoodreviews.com/project"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/tags/{id}":{"delete":{"tags":["Tags"],"summary":"Delete Tag","operationId":"deleteTag","description":"Soft-delete a workspace tag shared across customers and reviews.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object confirming the tag was deleted.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Application-level status code returned by this API."}}}}}}}}}}}
```


# MCP Server

Connect Claude or other MCP clients to one project for customers, reviews, messages, and reputation tasks.

The **MCP Server** connects assistants such as **Claude** to **one project at a time** so you can work in plain language with **customers**, **review requests**, **reviews**, **ratings**, **feedback**, **messages**, **locations**, **sources**, **tags**, **charges**, and **share templates**.

MCP (**Model Context Protocol**) is a standard way for assistants to use trusted tools. After you connect through **sign-in** (not by hunting down an API key), the assistant can read and change project records **only for the project tied to the URL you paste**.

{% hint style="info" %}
Open **Settings → MCP Server** in your project and copy **MCP Server URL** from the box there. That address already includes your project identifier (and your agency's API host when your account runs under a white-label agency). Use it exactly. Do **not** substitute a generic host-only link.
{% endhint %}

{% hint style="info" %}
Running a **white-label agency** and need assistants to manage **clients, team seats, or every business at once**? Use [**Agency MCP Server**](/agencies/mcp-server) instead. Project MCP stays inside **one** customer business.
{% endhint %}

***

## MCP Server page in Settings

1. Select the project you want the assistant to use.
2. Go to **Settings → MCP Server**.

You will see:

* **MCP Server URL** — copy this full value into your assistant's connector setup.
* **Connected apps** — tiles for tools that already completed sign-in. Each shows access level and recency, and you can **Revoke** access here when needed.
* **Example prompts** — starter instructions you can paste into chat once the connector is live.

For a complete list of tools the assistant can call, see [**Tools**](/platform/mcp-server/tools).

***

## What assistants can help with

Capabilities mirror what your project supports today. They focus on **this business**, not your agency console.

### Customers

Look up people in your directory; add or remove records; update notes and contact preferences; attach **tags**; archive or restore; stop or resume outreach where supported; cancel queued-but-not-sent messages; inspect related **charges**, **messages**, or **reviews** for one person when reconciling history.

### Review requests

Schedule **review requests** (email or SMS according to your strategy, reminders, eligibility, and sending limits). Integrations do not bypass your throttles or unsubscribe rules.

### Reviews

Search and read feedback already collected; **create reviews** manually (finding or creating the customer by email or phone); adjust moderation flags such as **hidden** or **duplicate** when cleaning data; attach **tags** to reviews; **mark reviews as replied** when you handled the response outside the connector; publish replies to **Google** or **Facebook** when those integrations are connected; remove reviews when upstream reconciliation requires it; generate **share images** using your saved **share templates**.

{% hint style="info" %}
To publish replies through connected Google or Facebook integrations, the assistant uses the **Reply to Review on Integration** tool after you confirm each draft. For built-in AI reply flows inside the product UI, see [**AI Tools**](/platform/ai-tools).
{% endhint %}

### Messages

Review outbound history for reporting-style questions (for example delivery-oriented summaries over recent campaigns). Individual messages can be removed when an integration needs to tidy audit data. **New** review requests are created through **asks**, not by inventing arbitrary message rows.

### Locations

List, add, edit, or remove **locations** so attribution stays aligned when assistants help import or reorganize multi-site data.

### Charges

Record or delete **spend signals** tied to customers when you sync billing or point-of-sale events into the project.

### Sources and tags

Maintain the **sources** catalog your reviews roll up under and the **tags** you use across customers and reviews.

{% hint style="info" %}
When an assistant sets a preset icon on a source or tag (not a custom uploaded image), use two lowercase words separated by one space, such as **fab fa-google** or **fas fa-star**. Omit the icon when you rely on an uploaded image instead.
{% endhint %}

### Share templates

List saved layouts for social-style review graphics or remove templates that are no longer needed.

***

## Connect Claude or another MCP assistant

Menus vary by product, but the flow is consistent:

1. Open the assistant's **Settings**.
2. Open **Connectors**, **Integrations**, or the equivalent.
3. Choose **Add custom connector** (or similar).
4. Paste the **MCP Server URL** from **Settings → MCP Server**. Use the entire string from the copy box.
5. Save. The assistant opens a **sign-in** window linked to your account.
6. Sign in if prompted. On **Authorize**, pick the **project** when asked (if your connector URL already scopes one project, that choice may be fixed for you), review **read**, **write**, and **delete** style permissions, and approve.

When the connector shows as connected, try one of the **Example prompts** from your MCP Server page or any of the suggestions below.

{% hint style="success" %}
To move the assistant to a **different** project, remove the connector and add it again using that project's **MCP Server URL**, then authorize again.
{% endhint %}

***

## Example prompts

These match the built-in **Example prompts** block on your MCP Server page:

1. **Weekly review digest** — Ask for a concise summary of reviews from the last seven days with counts, averages, breakdown by **source** and **location**, recurring praise, and recurring concerns.
2. **Send review requests safely** — Ask the assistant to **list** customers who match your criteria (for example recent sign-ups who have never been asked) and **wait for your confirmation** before scheduling sends with reminders.
3. **Add someone and ask** — Provide contact details for a new customer, then have the assistant create the record and schedule the first review request with your preferred reminder count.
4. **Who still needs an ask** — Request a capped list (for example up to 50) of customers never asked, newest first, skipping unsubscribed contacts, with name, email, and signup date.
5. **Location comparison** — Ask for a ninety-day **leaderboard by location** using review volume, average rating, share of five-star scores, and a simple trend versus the prior ninety days.
6. **Outreach health** — Ask for counts and rates across recent email sends (totals, delivery, opens, clicks, failures) so you can spot anomalies over roughly the last two weeks.

Your assistant still reasons in natural language. It chains the underlying lookups and updates for you.

{% hint style="info" %}
Assistants often pause for **confirmation** before bulk sends, large deletes, or anything similarly impactful. Use that moment to double-check filters and counts.
{% endhint %}

The server also ships **built-in workflow prompts** (Reputation Dashboard, Review Velocity, Triage Negative Reviews, and others). See [**Tools**](/platform/mcp-server/tools) for the full list.

***

## Permissions

Authorization typically exposes three bands of capability. The assistant only sees actions allowed by what you approve:

| Scope      | What it allows                                                                                                                                                                                      |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Read**   | Inspect customers, reviews, messages, locations, charges, sources, tags, and share templates                                                                                                        |
| **Write**  | Create or update customers and locations; schedule review requests; record charges; maintain sources and tags; adjust review flags, tags, mark-as-replied, integration replies, or share-image jobs |
| **Delete** | Remove customers, reviews, messages, locations, charges, sources, tags, or templates when those workflows are permitted                                                                             |

Everything stays inside the **one project** you authorized. Other projects, billing screens, and [**agency-wide**](/agencies/mcp-server) controls remain out of scope unless you add a separate connector.

{% hint style="warning" %}
Treat MCP access like handing someone your project keyboard. Prefer assistants you trust, and review destructive actions (deletes, bulk outreach, broad flag changes) before approving them.
{% endhint %}

***

## Other MCP-compatible assistants

Any client that supports custom MCP connectors can use the same **copied URL** and the same **sign-in** flow, not only Claude. Cursor, Claude Desktop, and other MCP clients follow the same pattern.

***

## Disconnect or revoke

**Inside the assistant.** Remove the connector from its settings list. Access stops immediately.

**Inside More Good Reviews.** On **Settings → MCP Server**, use **Revoke** under **Connected apps** for fine-grained cleanup, or revoke tokens from your account security flows if you suspect misuse.

Disconnecting does **not** erase reviews, customers, or ratings. It only removes the assistant's path back into the project. Reconnect any time by repeating authorization with the same **MCP Server URL**.

***

## Tips

{% hint style="success" %}
Name the product and project in your first message ("In More Good Reviews for *Bright Dental*, …") so the model reliably chooses this connector when several are installed.
{% endhint %}

{% hint style="info" %}
Save recurring prompts (weekly digests, monthly "never asked" sweeps, outreach audits) as reusable snippets inside your assistant.
{% endhint %}

{% hint style="warning" %}
Assistants may hit practical limits when reading huge histories in one pass. Narrow time ranges ("last 30 days") or row counts ("latest 100 reviews") when results truncate unexpectedly.
{% endhint %}

If something does not work as expected, see [**Troubleshooting**](/platform/mcp-server/troubleshooting).


# Tools

Every project MCP tool and built-in workflow prompt for customers, reviews, messages, and reputation data.

The **project MCP Server** exposes tools an assistant can call on your behalf. Each tool maps to an action inside **one project**. The assistant sees only tools that match the **Read**, **Write**, and **Delete** scopes you approved during sign-in.

List-style tools return **paginated** results. When a list is long, the assistant may need to request additional pages to see everything. Ask for narrower date ranges or filters when summaries look incomplete.

***

## Customers

| Tool                            | Permission | What it does                                                                                     |
| ------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ |
| List Customers                  | Read       | Search and filter your customer directory by name, email, tags, lifecycle state, and date ranges |
| Get Customer                    | Read       | Retrieve one customer with location and tags                                                     |
| Create Customer                 | Write      | Add a new customer with contact details, location, tags, and notes                               |
| Update Customer Notes           | Write      | Change internal notes on a customer record                                                       |
| Update Customer Photo           | Write      | Set a customer photo from a public image URL, or clear it with null                              |
| Update Customer Tags            | Write      | Attach or replace tags on a customer                                                             |
| Archive Customer                | Write      | Move a customer to archived state                                                                |
| Unarchive Customer              | Write      | Restore an archived customer                                                                     |
| Unsubscribe Customer            | Write      | Stop outreach to a customer                                                                      |
| Resubscribe Customer            | Write      | Resume outreach to a previously unsubscribed customer                                            |
| Cancel Customer Unsent Messages | Write      | Cancel queued messages that have not been sent yet for one customer                              |
| List Customer Charges           | Read       | View spend signals recorded for one customer                                                     |
| List Customer Messages          | Read       | View outbound message history for one customer                                                   |
| List Customer Reviews           | Read       | View reviews left by one customer                                                                |
| Delete Customer                 | Delete     | Permanently remove a customer record                                                             |

{% hint style="warning" %}
**Delete Customer** is irreversible. Review the record before approving.
{% endhint %}

***

## Review requests

| Tool       | Permission | What it does                                                             |
| ---------- | ---------- | ------------------------------------------------------------------------ |
| Create Ask | Write      | Schedule a review request (email or SMS) with reminders for one customer |

Review requests respect your project's strategy, throttles, and unsubscribe rules. The assistant cannot bypass sending limits you configured in the console.

***

## Reviews

| Tool                           | Permission | What it does                                                                   |
| ------------------------------ | ---------- | ------------------------------------------------------------------------------ |
| List Reviews                   | Read       | Search reviews by score, source, location, tags, reply status, and date ranges |
| Create Review                  | Write      | Add a review and find or create the customer by email or phone                 |
| Update Review Visibility       | Write      | Show or hide a review in your project                                          |
| Update Review Duplicate Flag   | Write      | Mark or unmark a review as a duplicate                                         |
| Update Review Location         | Write      | Assign a project location to a review by slug                                  |
| Update Review Source           | Write      | Assign a review source to a review by slug                                     |
| Mark Review Replied            | Write      | Record that you replied outside the platform                                   |
| Reply to Review on Integration | Write      | Publish a reply to Google or Facebook when that integration is connected       |
| Update Review Tags             | Write      | Attach or replace tags on a review                                             |
| Create Review Share Image      | Write      | Generate a share graphic from a saved template                                 |
| Delete Review                  | Delete     | Remove a review from your project                                              |

{% hint style="info" %}
**Reply to Review on Integration** publishes to connected third-party platforms. The assistant should show you draft replies and wait for confirmation before calling this tool.
{% endhint %}

***

## Messages

| Tool           | Permission | What it does                                                 |
| -------------- | ---------- | ------------------------------------------------------------ |
| List Messages  | Read       | Search outbound message history by channel, status, and date |
| Delete Message | Delete     | Remove a message record                                      |

New review requests are created with **Create Ask**, not by adding arbitrary message rows.

***

## Locations

| Tool            | Permission | What it does                      |
| --------------- | ---------- | --------------------------------- |
| List Locations  | Read       | View all locations in the project |
| Get Location    | Read       | Retrieve one location             |
| Create Location | Write      | Add a new location                |
| Update Location | Write      | Change location details           |
| Delete Location | Delete     | Remove a location                 |

***

## Charges

| Tool          | Permission | What it does                          |
| ------------- | ---------- | ------------------------------------- |
| List Charges  | Read       | Search spend signals across customers |
| Create Charge | Write      | Record a charge tied to a customer    |
| Delete Charge | Delete     | Remove a charge record                |

***

## Sources

| Tool          | Permission | What it does                   |
| ------------- | ---------- | ------------------------------ |
| List Sources  | Read       | View review source catalog     |
| Create Source | Write      | Add a new source               |
| Update Source | Write      | Rename or reconfigure a source |
| Delete Source | Delete     | Remove a source                |

***

## Tags

| Tool       | Permission | What it does                |
| ---------- | ---------- | --------------------------- |
| List Tags  | Read       | View workspace tags         |
| Create Tag | Write      | Add a new tag               |
| Update Tag | Write      | Rename or reconfigure a tag |
| Delete Tag | Delete     | Remove a tag                |

***

## Share templates

| Tool                  | Permission | What it does                                 |
| --------------------- | ---------- | -------------------------------------------- |
| List Share Templates  | Read       | View saved layouts for review share graphics |
| Delete Share Template | Delete     | Remove a share template                      |

***

## Built-in workflow prompts

The project server includes **prompts** (reusable workflow templates) the assistant can invoke. These guide multi-step reputation tasks:

| Prompt                              | Permission | What it does                                                                                                             |
| ----------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------ |
| Reputation Dashboard                | Read       | Builds a multi-section dashboard with review summary, location leaderboard, outreach health, and items needing attention |
| Review Velocity                     | Read       | Tracks how fast new reviews arrive, whether pace is accelerating, and optional reviews-per-ask conversion                |
| Triage Negative Reviews             | Read       | Finds unreplied low-score reviews, ranks urgency, and drafts suggested responses without publishing                      |
| Publish Replies to Google/Facebook  | Write      | Finds unreplied reviews, drafts replies, and publishes to connected platforms after your confirmation                    |
| Run a Review Request Campaign       | Write      | Finds customers matching a segment and schedules review requests after your confirmation                                 |
| Add a Customer and Request a Review | Write      | Creates a customer from details you provide, then schedules a review request                                             |

These prompts appear automatically in compatible MCP clients that support server-defined prompts. You can also describe the same workflows in plain language without invoking a prompt by name.

***

## Tool behavior notes

**Pagination.** List tools accept page and limit parameters. Large directories or long review histories may require multiple calls. Ask the assistant to "show the next page" or narrow the date window.

**Filters on List Customers.** Useful filters include **not-asked** (never received a review request), **not-reviewed**, **unsubscribed**, **archived**, and **has-charges**. Combine with date bounds on signup or last-contact columns.

**Filters on List Reviews.** Filter by score, source, location, tags, **with-replies**, **without-replies**, **hidden**, and date ranges.

**Destructive tools.** Tools marked **Delete** in the tables above, plus archive and unsubscribe actions, change or remove data. Assistants compatible with MCP safety hints will flag these before running.

For setup steps and example chat prompts, see [**MCP Server**](/platform/mcp-server).


# Skills

Prebuilt Claude skills that turn your project MCP connection into ready-made reputation reports, action lists, and review outreach.

**Skills** are prebuilt instructions you add to Claude so it handles common reputation tasks the same way every time. Each skill works with your **project MCP Server** connection and turns plain requests like "what should I work on this week?" into a clear, repeatable result.

Skills are optional. You can already ask the assistant to do any of this in your own words. A skill simply packages a proven workflow so the output is consistent and you do not have to explain the steps each time.

{% hint style="info" %}
Skills need a connected **project MCP Server**. Set that up first on **Settings → MCP Server**. See [**MCP Server**](/platform/mcp-server) for the connection steps.
{% endhint %}

***

## Available skills

| Skill                  | Use it when you want to                      | What you get                                                                                                                                                                   |
| ---------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Reputation Report**  | See how your reviews are doing over a period | A full read-only summary: review volume, ratings, location and source breakdowns, reply coverage, and outreach health, with trends versus the previous period                  |
| **Reputation Actions** | Know what to fix or improve next             | A short, ranked to-do list of the highest-impact actions, such as unreplied negative reviews, reply gaps, and outreach problems. It recommends only; it does not send anything |
| **Review Pipeline**    | Send review requests to the right people     | A list of customers who are ready to be asked (by default, people never asked before), then scheduled requests after you confirm                                               |

Each skill is read-only unless noted. **Review Pipeline** schedules review requests, and it always shows you the list and waits for your approval before sending.

***

## How to add a skill

Skills live in the free More Good Reviews skills library at [github.com/moregoodreviews/mgr-skills](https://github.com/moregoodreviews/mgr-skills). The steps depend on how you use Claude.

{% tabs %}
{% tab title="Claude apps and website" %}

1. Open the skills library and choose the skill you want.
2. Download the skill folder as a zip.
3. In Claude, open **Settings**, then **Capabilities**.
4. Upload the zipped skill folder.
5. Make sure your **project MCP Server** is connected in the same Claude workspace.
   {% endtab %}

{% tab title="Claude Code" %}

1. Open the skills library.
2. Copy the skill folder into your Claude skills directory.
3. Confirm your **project MCP Server** is connected.
   {% endtab %}
   {% endtabs %}

Once a skill is added, simply describe what you want. Claude recognizes the request and follows the skill. For example, ask for a reputation report, ask what you should improve, or ask who to send review requests to.

***

## What to expect

* **Reports and action lists are read-only.** They look at your data and tell you what they find. They never change reviews, customers, or messages.
* **Review requests always ask first.** The Review Pipeline skill shows the list of customers it plans to contact and waits for your confirmation before scheduling anything.
* **Results respect your settings.** Review requests still follow your request strategy, sending limits, and unsubscribe rules.
* **Large histories may be summarized in parts.** For long date ranges, narrow the window (for example, "last 30 days") if a result looks incomplete.

***

## Make a skill your own

Each skill ships with sensible defaults, such as the time period it looks at and the targets it measures against. You can adjust these to fit your business.

1. Open the skill folder you downloaded.
2. Edit the settings near the bottom of the skill file, such as the default time period or review targets.
3. Save and re-add the updated skill to Claude.

{% hint style="warning" %}
Your copy of a skill is separate from the library. If you download a newer version later, it replaces your edits. Keep a note of any changes you made so you can reapply them.
{% endhint %}

{% hint style="success" %}
Have an idea for a new skill or an improvement? You can suggest changes in the skills library on GitHub.
{% endhint %}


# Troubleshooting

Fix project MCP connection, authorization, missing tools, and scope issues.

This guide covers common issues when connecting an MCP assistant to a **project** in More Good Reviews. Most problems come down to the **URL you paste**, **permissions you approve**, or using the **agency MCP server** when you meant the project one.

{% hint style="info" %}
For agency-level MCP issues (client businesses, portal users, team seats), see [**Agency MCP Troubleshooting**](/agencies/mcp-server/troubleshooting).
{% endhint %}

***

## The assistant cannot connect at all

### Use the full MCP Server URL

Copy **MCP Server URL** from **Settings → MCP Server** in your project. Paste the **entire** string into your assistant's connector setup.

{% hint style="warning" %}
Do **not** paste a generic API host or invent a path. The project URL includes a scoped segment and looks similar to `https://api.example.com/mcp/p/…`.
{% endhint %}

### White-label and custom domains

If your account runs under a white-label agency with a **custom API domain**, the copied URL uses that host. Always paste the value from **your** console, not a generic More Good Reviews example.

### Re-add the connector after URL changes

If you changed domains or switched projects, remove the old connector and add a new one with the current **MCP Server URL**, then authorize again.

***

## Sign-in or authorization fails

### Complete the flow in one session

When you save a new connector, the assistant opens a **sign-in** window. Finish sign-in and click **Authorize** before the window closes. If you see a message that the authorization request is missing or expired, start again from **Add custom connector**.

### Choose the correct account

Sign in with the MGR account that owns the project. Client portal users may not have permission to authorize MCP connections.

### Grant enough scope

If you only approved **Read**, the assistant cannot schedule review requests or update records. Remove the connector, reconnect, and approve **Write** or **Delete** when you need those actions.

| Symptom                                           | Likely cause             | Fix                                             |
| ------------------------------------------------- | ------------------------ | ----------------------------------------------- |
| Assistant says it cannot create or update records | Read-only authorization  | Reconnect and approve **Write**                 |
| Assistant cannot delete records                   | Delete scope not granted | Reconnect and approve **Delete**                |
| Fewer tools than expected                         | Partial scopes           | Reconnect and review all three scope checkboxes |

***

## Connected but the wrong data appears

### Project versus agency server

Project MCP returns **customers, reviews, and messages** for **one business**. If you need to create client businesses or manage portal users, use [**Agency MCP Server**](/agencies/mcp-server) instead.

### One connector per project

Project MCP is scoped to **one project** per URL. To work in a different business, remove the connector and add it again with that project's **MCP Server URL**.

### Name the connector in chat

When you run several MCP connectors, start your message with the product and project name ("In More Good Reviews for *Bright Dental*, …") so the assistant selects the right one.

***

## Results look incomplete or truncated

### Large lists are paginated

Customer directories, review histories, and message logs may span many pages. Ask the assistant to:

* Narrow the date range ("last 30 days" instead of "all time")
* Cap the count ("latest 100 reviews")
* Request the next page explicitly

### Use filters

For customers, filters like **not-asked**, **not-reviewed**, and **unsubscribed** reduce noise. For reviews, filter by score, source, location, or reply status.

***

## Connected apps do not show the assistant

After authorization, the assistant should appear under **Connected apps** on **Settings → MCP Server**.

1. Confirm authorization finished with a success message.
2. Refresh the settings page.
3. If it still does not appear, revoke any stale entry, remove the connector in the assistant, and connect again.

Each tile shows **scopes** (read, write, delete) and **when** the connection was approved. Use **Revoke** on a tile to cut off one assistant without affecting others.

***

## Actions fail or return errors

### Review requests blocked

**Create Ask** respects your request strategy, daily and monthly caps, and unsubscribe status. If sends fail, check **Settings → Strategy**, email and SMS limits, and whether the customer is unsubscribed.

### Integration replies fail

**Reply to Review on Integration** requires Google or Facebook to be connected in **Settings → Integrations**. The review must exist on that platform. The assistant should draft replies and wait for your confirmation before publishing.

### Icon format on sources and tags

When setting a preset icon (not an uploaded image), use two lowercase words separated by one space, such as **fab fa-google** or **fas fa-star**.

***

## Disconnect and start fresh

**In the assistant.** Remove or disable the custom MCP connector.

**In MGR.** On **Settings → MCP Server**, click **Revoke** on the relevant **Connected apps** tile.

Disconnecting does **not** delete your reviews, customers, or ratings. It only removes the assistant's access. Reconnect anytime with the same URL and a new authorization.

***

## Still stuck?

1. Verify you copied the latest **MCP Server URL** from **Settings → MCP Server**.
2. Re-authorize with the scopes you need.
3. Try a simple read-only prompt first ("List my locations") before write or delete tasks.

For tool names and permissions, see [**Tools**](/platform/mcp-server/tools). For setup walkthroughs, see [**MCP Server**](/platform/mcp-server).


# Google Review Guidelines

Follow Google review rules when using MGR for requests, review pages, and replies.

Google has rules for how businesses collect and manage reviews. If you break them, Google may remove reviews, suspend your Business Profile, or restrict your listing. MGR gives you tools to collect more reviews, but you are responsible for using them in a way that follows Google's policies.

This page explains what Google expects, how MGR is designed to help you stay compliant, and the settings we recommend.

***

### What Google Cares About

Google's policies focus on honest, unbiased reviews from real customers. The main rules that affect how you use MGR are:

* **No review gating** – You should not block unhappy customers from leaving a public review on Google while only sending happy customers there.
* **No incentives for reviews** – You should not offer money, discounts, gifts, or entries into a sweepstakes in exchange for a Google review.
* **No fake or misleading reviews** – Reviews must come from real customers who had a genuine experience with your business.
* **No posting on behalf of customers** – You should not submit reviews for customers without their knowledge, or copy and paste reviews they did not write themselves.

For the full policy, see [Google's Maps user contributions policy](https://support.google.com/maps/answer/2622994) and [Google's prohibited and restricted content policy](https://support.google.com/contributionpolicy/answer/7400114).

US businesses should also follow the FTC's consumer review rules. Do not pay someone for a positive review. Do not stop someone from leaving a public review because their rating was low. MGR already keeps a public path by default. Do not turn that off.

For the FTC's guidance, see [The Consumer Reviews and Testimonials Rule](https://www.ftc.gov/business-guidance/resources/consumer-reviews-testimonials-rule-questions-and-answers).

***

### How MGR Helps You Stay Compliant

MGR is built around collecting feedback first and directing customers to Google when appropriate. Several features are designed with Google's rules in mind:

#### Link Revealer (recommended)

On your [review page Links](/platform/review-pages/links), you can set a **Link Reveal Rating** so Google review buttons appear automatically when a customer selects a high rating (typically 4 or 5 stars). For lower ratings, MGR shows a **link revealer** by default: a small link that still lets the customer go to Google if they choose.

{% hint style="success" %}
Keep **Link Revealer Button** set to **Enable**. This gives every customer a path to leave a public review, which aligns with Google's expectations.
{% endhint %}

{% hint style="danger" %}
Do not disable the link revealer. If you hide public review links from customers who had a negative experience, Google may remove your Business Profile listing.
{% endhint %}

#### Redirects

[Redirects](/platform/review-pages/redirects) are off by default. If you add a URL for a rating, that customer leaves your page as soon as they pick it. Leave other ratings blank so those customers stay on your page, where the link revealer still lets them go to Google.

#### Collecting feedback before Google

It is fine to ask customers for private feedback on your review page before sending them to Google. Many businesses use MGR this way. The important part is that unhappy customers can still reach Google if they want to.

#### Filtering what you display

You can hide low-rated reviews from your [Showcase](https://github.com/moregoodreviews/mgr-docs/tree/main/showcase.md) and [Widgets](https://github.com/moregoodreviews/mgr-docs/tree/main/widgets.md). That is different from blocking someone from leaving a review on Google. Display filters do not prevent customers from posting on Google.

#### Syncing and replying

When you connect [Google My Business](https://github.com/moregoodreviews/mgr-docs/tree/main/integrations.md), MGR imports your Google reviews and lets you reply from your dashboard. Replies should be honest, professional, and written by you (or approved by you if you use AI assistance).

#### AI Review Suggestions

[AI Review Suggestions](/platform/review-pages/review-suggestions) are off by default. When you turn them on, customers who pick a 4 or 5 star rating can click **Generate** for writing help. They choose whether to use a suggestion, and they can edit it.

Treat suggestions as a starting point. Ask customers to change the text so it matches their own experience. Do not post a suggestion to Google for them, and do not ask them to paste unchanged text they did not write.

***

### Recommended Settings

Use these settings as a starting point for a Google-friendly setup:

1. **Review Pages > Links** – Add a Google review link. Set **Link Reveal Rating** to 4 or 5. Keep **Link Revealer Button** enabled.
2. **Review Pages > Success Page** – You can encourage happy customers to copy their review and paste it on Google. Do not write reviews for them or ask them to post text they did not write.
3. **Review Pages > Links > Incentive** – Leave this blank for Google links. Do not offer discounts, free items, or rewards for leaving a Google review.
4. **Settings > Strategy** – Request reviews from real customers after a genuine transaction or visit. See [Request Strategy](https://github.com/moregoodreviews/mgr-docs/tree/main/request-strategy.md) for timing and limits.
5. **Settings > Integrations** – Connect Google My Business to sync reviews and reply from one place.
6. **Review Pages > Redirects** – Leave ratings blank unless you want an immediate send to a public review site. Do not send low ratings to a private page with no public option.
7. **Review Pages > Feedback Form** – Leave AI Review Suggestions off unless you want writing help on that page. If you turn it on, treat suggestions as a starting point the customer should edit.

***

### Review Requests

Sending review requests by email or SMS is allowed when you follow a few basic rules:

* **Ask real customers only** – Import customers who actually used your product or service.
* **Do not spam** – Use your [Request Strategy](https://github.com/moregoodreviews/mgr-docs/tree/main/request-strategy.md) schedule and limits so customers are not overwhelmed.
* **Do not condition rewards on reviews** – Thank-you messages are fine. Paying or rewarding customers only if they leave a positive Google review is not.
* **Honor opt-outs** – MGR handles unsubscribe and STOP requests for email and SMS. Do not manually re-add customers who opted out just to ask for another review.

{% hint style="info" %}
A customer is only automatically requested once per project. If you want to ask again, send a manual request from their profile on the **Customers** page.
{% endhint %}

***

### AI-Generated Replies

MGR can suggest replies to your Google reviews using AI. Before you send a reply:

* Read and edit the suggestion so it matches what you actually want to say.
* Do not use AI to generate fake reviews or to post on behalf of customers. The same rule applies to [AI Review Suggestions](/platform/review-pages/review-suggestions). Do not paste an unedited suggestion to Google for a customer.
* Keep replies professional, especially for negative reviews.

***

### What to Avoid

| Do not                                                      | Why                                                                    |
| ----------------------------------------------------------- | ---------------------------------------------------------------------- |
| Disable the link revealer                                   | Blocks unhappy customers from reaching Google                          |
| Offer incentives on Google links                            | Violates Google's no-incentive rule                                    |
| Send review requests to people who never used your business | Fake or misleading solicitation                                        |
| Post reviews for customers                                  | Reviews must reflect the customer's own experience                     |
| Only ask happy customers to review you outside of MGR       | Selective solicitation violates Google's gating rules                  |
| Send only happy customers to Google with redirects          | Review gating. Leave other ratings blank so the public path stays open |
| Ask customers to paste unedited AI text to Google           | Reviews must reflect the customer's own words                          |

***

### If Google Removes a Review or Restricts Your Listing

MGR cannot appeal Google's decisions on your behalf. If a review is removed or your listing is restricted:

1. Review your recent review collection practices against the guidance on this page.
2. Check your [Links](/platform/review-pages/links) settings, especially the link revealer, and your [Redirects](/platform/review-pages/redirects).
3. Visit [Google Business Profile Help](https://support.google.com/business/) for next steps.
4. Contact MGR support if you need help understanding how your MGR settings may have contributed.

{% hint style="warning" %}
MGR does not guarantee that Google will accept, publish, or keep any review. Third-party platforms make their own enforcement decisions.
{% endhint %}


# Customers

Bring your customers into MGR so you can request reviews. Import via CSV, integrations, BCC, manual entry, or the REST API.

To request reviews from your customers, you need to bring them into MGR first. This page explains what data you need, where to find the import options, and how each method works.

### Where to Import

Go to **Customers** in the sidebar and click **Add**. A modal opens with tabs for each import method: **Manual Entry**, **Upload CSV**, **Integrations**, and **BCC** (if available). You can also open a specific tab directly—for example, add `?import=csv` to the Customers page URL to open the CSV tab.

***

### What Data You Need

#### Required for Sending Messages

You need at least one way to reach each customer:

* **Email** – For sending review requests and reminders by email.
* **Phone** – For sending review requests and reminders by SMS. Use a full number with country code (e.g., +18888888888). Only import numbers you have permission to text. See [SMS Consent](/sms/sms-consent).

Without an email or phone number, MGR cannot send messages to that customer.

#### Customer Data

| Field           | Purpose                                                          |
| --------------- | ---------------------------------------------------------------- |
| **Name**        | First and last name. Used in messages and to identify customers. |
| **Email**       | Required for email requests.                                     |
| **Phone**       | Required for SMS requests.                                       |
| **Company**     | Optional. Shown on customer profiles.                            |
| **Signup Date** | The date that triggers your request strategy. See below.         |

#### Why the Signup Date Matters

Your [Request Strategy](/platform/request-strategy) decides when to send the first review request. You can set a delay such as "14 days after signup" or "2 hours after charge." The **signup date** is the date used when the trigger is "send after a date." Think of it as the start date for that customer—when they joined, paid, or completed a purchase. If you leave it blank, today's date is used.

#### Charge History (Optional)

If you connect Stripe, charge history is imported automatically. You can also send it via an app connector or the REST API. Charge history lets you target customers in your request strategy—for example, only request reviews from customers who have made at least 3 charges, spent $100 or more, or have an active subscription. This helps you focus on customers who are more likely to leave positive reviews.

***

### Import Methods

#### Manual Entry

Add one customer at a time. Fill in their name, email, phone, company, location (if you use locations), tags, and signup date. You can optionally schedule a review request immediately and choose the channel (email or SMS), reminders, and review page.

{% hint style="info" %}
Manual entry is ideal when you have a few customers or want to add someone quickly. For larger lists, use CSV or an integration.
{% endhint %}

#### CSV Upload

Upload a CSV file to import up to 1,000 customers at once. The import runs in the background; you'll see a confirmation when it's scheduled. Customers appear in your list shortly after.

**Steps:**

1. Go to **Customers** and click **Add**.
2. Open the **Upload CSV** tab.
3. Click **Download Template** to get a sample file with the correct headers and a sample row using your name and email.
4. Fill in your data and save as CSV (UTF-8).
5. Click **Upload CSV** and select your file.

**CSV Headers**

| Header           | Required | Description                                                                                              |
| ---------------- | -------- | -------------------------------------------------------------------------------------------------------- |
| first\_name      | Yes      | The customer's first name.                                                                               |
| last\_name       | No       | The customer's last name.                                                                                |
| email            | No       | The customer's email address.                                                                            |
| phone            | No       | The customer's phone number.                                                                             |
| company          | No       | The customer's company name.                                                                             |
| location         | No       | The slug or UUID of a location. Must match a location in **Settings > Locations**.                       |
| notes            | No       | Internal notes (not shown to customers).                                                                 |
| tags             | No       | Comma-separated list of tag slugs. Tags must exist in your project and be for customers.                 |
| signed\_up\_at   | No       | The customer's start date. Use YYYY-MM-DD format.                                                        |
| unsubscribed\_at | No       | The date the customer unsubscribed, if any. Use YYYY-MM-DD format. Leave blank for subscribed customers. |
| address1         | No       | Address line 1.                                                                                          |
| address2         | No       | Address line 2.                                                                                          |
| city             | No       | City or locality.                                                                                        |
| state            | No       | State or region.                                                                                         |
| postal\_code     | No       | Postal or ZIP code.                                                                                      |

{% hint style="warning" %}
Each row must have either an email or a phone number. Duplicate emails or phones in your project will update the existing customer instead of creating a new one.
{% endhint %}

{% hint style="success" %}
Migrating from another review platform? Add an `unsubscribed_at` column to your CSV with the date each customer opted out. MGR will skip review requests for those customers and respect their unsubscribed status.
{% endhint %}

#### Stripe

Connect your Stripe account to automatically import customers and their charge history. Ideal if you want to request reviews from paying customers or subscribers. Set up the connection under **Settings > Integrations**.

Refunds are handled automatically. When a charge is refunded in Stripe, MGR records a matching negative charge so the customer's net spend stays accurate. This means request strategies that filter by spend won't keep targeting customers who got their money back.

#### HubSpot

Connect HubSpot to import contacts. You can choose which contacts to import by lifecycle stage or sync them all. Set up under **Settings > Integrations**.

#### App Connectors (Zapier, Make, Pabbly, Boost.space)

Use an app connector to send customer data from thousands of apps and CRMs into MGR. No coding required. Useful if your CRM or tool isn't natively supported. Set up under **Settings > Integrations**.

Connectors: [Zapier](https://zapier.com/apps/more-good-reviews/integrations), [Pabbly Connect](https://accounts.pabbly.com/login/?s=connect\&pl=https://connect.pabbly.com/share-app/CUFRYwBlVTdTGARADkEHYltIBzACXlNpVUVUXQFkB0EHKAlBBmwKFQx3U0UHf1VmAG0), [Make](https://www.make.com/en/hq/app-invitation/0b3a8c3446b8c2f7cfc1acdcf434104c), [Boost.space](https://integrator.boost.space/app/invite/096ef2f6f3a68a7099ad125c107a69cf).

#### Email BCC

Each project has a unique BCC email address. When you send receipts, invoices, or other emails to customers, add this address in the BCC field. MGR will import the recipient's name and email from each email automatically.

**How to use it:**

1. Go to **Customers** and click **Add**.
2. Open the **BCC** tab.
3. Copy the BCC email address shown.
4. Add it to the BCC field in your email system when sending to customers.

{% hint style="warning" %}
The BCC option is only available when your project uses the platform's email delivery (not your own SMTP). If you send via your own SMTP server, BCC import may not work.
{% endhint %}

{% hint style="info" %}
BCC is great for businesses that already email customers (e.g., receipts or invoices). Each time you send, new customers are imported without extra steps.
{% endhint %}

#### REST API

Send customer data from your own server using the REST API. Endpoints are available for importing customers and charges. See the [API Reference](/platform/api-reference) for details.

***

### After Import

* **CSV imports** – The import runs in the background. You may receive an email when it completes. Customers appear on the Customers page as they are processed.
* **Integrations** – Stripe and HubSpot sync continuously. New and updated customers are imported automatically.
* **BCC** – Each BCC'd email creates or updates a customer as soon as the email is received.
* **Manual entry** – The customer appears immediately.

Once customers are in your project, configure your [Request Strategy](/platform/request-strategy) and turn on automatic review collection to start requesting reviews. You can also send manual review requests from individual customer profiles.

***

### Tips

{% hint style="success" %}
Use the signup date to control when each customer gets their first request. For example, set it to the date they made a purchase so your "7 days after signup" delay sends the request 7 days after that purchase.
{% endhint %}

{% hint style="info" %}
If you have multiple locations, include the `location` column in your CSV with the correct slug or UUID. Customers will be assigned to that location for filtering and reporting.
{% endhint %}

{% hint style="info" %}
Tags in the CSV must use tag slugs (the URL-friendly name) and must already exist in your project under Settings > Tags. Use comma-separated values for multiple tags.
{% endhint %}

### Suggest an Integration

Have an idea for a native integration? [Let us know](http://feedback.moregoodreviews.com) and we can build it for you.


# Reviews

Bring existing reviews into MGR from Google My Business, public review pages, CSV upload, or manual entry.

If you have reviews, ratings, or feedback on Google, Facebook, Yelp, or other sites, you can bring them into MGR so they appear in your dashboard and on your [Showcase](/platform/showcase). This page explains where to find the import options and how each method works. **The best way to import Google reviews is the Google My Business integration**—it syncs automatically and keeps your ratings and feedback up to date, helping you manage your reputation in one place.

### Where to Import

Go to **Reviews** in the sidebar and click **Add**. If you have no reviews yet, you can also click **Import Reviews**. A modal opens with three tabs: **Quick Import**, **Manual Entry**, and **Upload CSV**. For Google reviews, you can also connect **Google My Business** under **Settings > Integrations**.

***

### Google My Business (Recommended for Google Reviews)

The Google My Business integration is the best way to import and manage your Google reviews. It syncs your reviews automatically and keeps them up to date—no manual imports or URL pasting. Your ratings and feedback from Google appear in MGR, and you can reply to reviews directly from your dashboard.

**How it works:**

1. Go to **Settings** in the sidebar and click **Integrations**.
2. Find **Google My Business** under Review Integrations and click **Connect**.
3. Sign in with your Google account and authorize the connection.
4. Choose which business locations to sync. Reviews from those locations are imported and kept up to date.
5. Click **Sync** or **Resync** anytime to pull in the latest reviews.

{% hint style="info" %}
**Sync** and **Resync** keep loading reviews from Google until your project is caught up with what is already stored, then they stop. If you have a long review history on Google, the first sync after connecting or a full resync may take a little longer, but it runs in the background.
{% endhint %}

Once connected, new Google reviews appear in MGR automatically. You can reply to them, assign tags, filter by location, and display them on your [Showcase](/platform/showcase). Reviews stay in sync, so you always have the latest ratings and feedback in one place.

{% hint style="success" %}
Google My Business is the recommended method for importing Google reviews. It syncs automatically, supports multiple locations, and lets you reply to reviews from MGR—so you can manage your reputation without switching between tools.
{% endhint %}

{% hint style="info" %}
If you have multiple locations, select which ones to sync when connecting. Reviews will be tagged by location so you can filter and report by store or branch.
{% endhint %}

***

### Quick Import (from a Website URL)

Import reviews directly from a public review page. Paste the URL and MGR will fetch the reviews for you. Use this when you don't have the Google My Business integration, when importing from Facebook, Trustpilot, Yelp, or LinkedIn, or when the reviews live on another public website.

**Supported sites:** Google, Facebook, Trustpilot, Yelp, LinkedIn, and **Other Website** for any public reviews page.

**Steps:**

1. Go to **Reviews** and click **Add**.
2. Open the **Quick Import** tab.
3. Under **Scrape a Website**, choose the review site. Pick **Other Website** if the page is not Google, Facebook, Trustpilot, Yelp, or LinkedIn.
4. Paste the URL of your business's review page. The placeholder shows the expected format, such as a Google Maps place URL or a public `/reviews` page.
5. If you chose **Other Website**, you can pick a source or leave it blank so MGR detects it from the website.
6. If you use locations, optionally assign the imported reviews to a location.
7. For Google, Facebook, Trustpilot, Yelp, and Other Website, you can check **Positive only** to import only 4- and 5-star reviews.
8. Click **Import Recent Reviews**.

The import runs in the background. You'll see a confirmation when it's scheduled. Reviews appear in your list shortly after. You may receive an email when the import completes.

{% hint style="info" %}
For Google reviews, prefer the [Google My Business integration](#google-my-business-recommended-for-google-reviews) for automatic, ongoing sync. Quick Import from a URL is a one-time fetch.
{% endhint %}

**Other Website** imports reviews from a public page that does not have its own importer. It is a one-time fetch and does not keep syncing new reviews from that site.

MGR only imports customer reviews that already show a **1 to 5 star** rating and a real date from the **last 2 years**. The page must be public (no sign-in). Rating-only reviews are included. Reviewer name, company, photo, and review text are imported when they are on the page. Q\&A, comments, forum posts, testimonials without a star rating, thumbs-up, and replies are skipped.

If you leave **Source** blank, MGR detects the site name from the page and creates a source if you do not already have one. New sources use the site's favicon for the icon and color. You can change those later in **Settings > Sources**.

Reviews from Other Website are stored with the reviewer name. They are not customers you can email or text. Running the same URL again updates matching reviews instead of creating duplicates. There is a daily limit on how many times you can import from the same source.

{% hint style="warning" %}
The URL must point to a public reviews listing, not a homepage or a page that requires a sign-in. If you paste a Google, Facebook, Trustpilot, Yelp, or LinkedIn listing, choose that site instead of Other Website. If the page structure changes or the site blocks the import, the import may fail. You'll receive an email if that happens.
{% endhint %}

***

### Manual Entry

Add one review at a time. Enter the customer's name, contact info, rating, review text, date, and optionally the source, location, and tags.

**Steps:**

1. Go to **Reviews** and click **Add**.
2. Open the **Manual Entry** tab.
3. Fill in the customer section (first name, last name, email, phone, company).
4. Fill in the review section (rating, review text, date, source, location, tags).
5. Click **Save**.

The review appears in your list immediately.

{% hint style="info" %}
Manual entry is ideal when you have a few reviews or want to add one quickly. For larger batches, use Quick Import or CSV upload.
{% endhint %}

***

### CSV Upload

Upload a CSV file to import up to 1,000 reviews at once. The import runs in the background; you'll see a confirmation when it's scheduled. Reviews appear in your list shortly after. You may receive an email when the import completes.

**Steps:**

1. Go to **Reviews** and click **Add**.
2. Open the **Upload CSV** tab.
3. Click **Download Template** to get a sample file with the correct headers.
4. Fill in your data and save as CSV (UTF-8).
5. Click **Upload CSV** and select your file.

**CSV Headers**

| Header      | Required | Description                                                                            |
| ----------- | -------- | -------------------------------------------------------------------------------------- |
| first\_name | Yes      | The reviewer's first name.                                                             |
| last\_name  | No       | The reviewer's last name.                                                              |
| email       | No       | The reviewer's email address.                                                          |
| phone       | No       | The reviewer's phone number.                                                           |
| company     | No       | The reviewer's company name.                                                           |
| score       | Yes      | The rating (1–5).                                                                      |
| review      | No       | The review text.                                                                       |
| source      | No       | The slug or UUID of a source. Must match a source in **Settings > Sources**.           |
| location    | No       | The slug or UUID of a location. Must match a location in **Settings > Locations**.     |
| tags        | No       | Comma-separated list of tag slugs. Tags must exist in your project and be for reviews. |
| created\_at | No       | The date of the review. Use YYYY-MM-DD format.                                         |

**What happens during import:** Each row creates or finds a customer (by email or phone) and attaches a review to them. If the customer already exists, the review is added to their profile. If not, a new customer is created.

{% hint style="warning" %}
Each row must have either an email or a phone number so MGR can associate the review with a customer. Without a way to identify the reviewer, the import may skip or fail for that row.
{% endhint %}

{% hint style="info" %}
Download an example CSV template from [moregoodreviews.com/csv/reviews.csv](https://moregoodreviews.com/csv/reviews.csv).
{% endhint %}

***

### After Import

* **Google My Business** – Reviews sync automatically. New reviews appear in MGR as they come in. Use **Sync** or **Resync** on the integration page to pull the latest data.
* **Quick Import** – The import runs in the background. You may receive an email when it completes. Reviews appear on the Reviews page as they are processed.
* **CSV Upload** – Same as Quick Import. The import is scheduled and runs in the background.
* **Manual Entry** – The review appears immediately.

Once reviews are in your project, they appear in your [Showcase](/platform/showcase), widgets, and analytics. You can reply to them, assign tags, or filter by location.

***

### Tips

{% hint style="success" %}
Connect **Google My Business** first if you have Google reviews. It's the easiest way to import and manage your reputation—reviews sync automatically and you can reply from MGR.
{% endhint %}

{% hint style="success" %}
Use the **Positive only** option when importing from Google, Facebook, Trustpilot, Yelp, and Other Website if you want to focus on 4- and 5-star reviews for your showcase or marketing.
{% endhint %}

{% hint style="info" %}
If you have multiple locations, assign a location when importing so you can filter and report by location later.
{% endhint %}

{% hint style="info" %}
Tags in the CSV must use tag slugs (the URL-friendly name) and must already exist in your project under Settings > Tags. Use comma-separated values for multiple tags. Tags must be for reviews, not customers.
{% endhint %}


# SMS Consent

Get permission before you text customers. MGR handles STOP replies. You are responsible for consent.

Before you send review requests by text, you need permission from each person you message. MGR handles STOP replies and unsubscribes after a message goes out. It does not collect or store consent for you. You are responsible for having permission before you import a phone number or turn on SMS.

This page is a starting point, not legal advice. Rules vary by country. Talk to your counsel if you are unsure.

***

### What You Need in the US

US law generally requires **prior express written consent** before you send marketing texts, including review requests. That usually means the person agreed in writing (including electronic form) to get this kind of text from you, at that number, and they knew they could opt out.

A phone number in your POS, CRM, or a past conversation is not enough by itself.

For the FCC's guidance, see [Stop Unwanted Robocalls and Texts](https://www.fcc.gov/consumers/guides/stop-unwanted-robocalls-and-texts).

***

### What MGR Does

MGR can:

* Send SMS to customers you add who have a phone number, when your [Request Strategy](/platform/request-strategy) or a manual send uses SMS
* Honor **STOP** (and **START**, where the provider supports it) when you set up the incoming webhook
* Let you unsubscribe a customer from the **Customers** page

MGR does not:

* Ask the customer for SMS consent inside the product
* Check that you have consent before a send
* Replace carrier registration (such as 10DLC or A2P) on your provider account

***

### Before You Send

1. Get consent outside MGR. That might be a checkout checkbox, an intake form, or a signed agreement.
2. Import only phone numbers you are allowed to text. See [Importing Customers](/importing/customers).
3. Connect a provider and add the incoming webhook so STOP replies unsubscribe the customer.
4. Then enable SMS in **Settings > Strategy**.

{% hint style="warning" %}
Do not text purchased lists, scraped numbers, or anyone who has not agreed to hear from you. Honor every STOP. Do not re-add a customer who opted out just to ask again.
{% endhint %}

***

### STOP Is Not the Same as Consent

Setting up STOP is required, and MGR will unsubscribe the customer when the webhook is in place. That only covers people who already received a text and replied. It does not give you permission to text them the first time.

***

### Choosing a Provider

[Twilio](/sms/sms-with-twilio), [SimpleTexting](/sms/sms-with-simpletexting), and [ClickSend](/sms/sms-with-clicksend) use registered business numbers and campaigns. In the US, that usually means 10DLC or A2P registration with your provider.

[TextLink](/sms/sms-with-textlink) sends through a spare Android phone and your own SIM. That does not remove the need for consent, and it does not replace carrier rules that may still apply to your traffic. If you need a registered US business messaging setup, use Twilio, SimpleTexting, or ClickSend.

***

### Tips

{% hint style="success" %}
Keep a record of how and when each person agreed to texts. You may need that if a carrier, provider, or customer asks.
{% endhint %}

{% hint style="info" %}
SMS templates live in [SMS Settings](/platform/projects/sms-settings). Keep messages short, name your business, and include a clear way to opt out (MGR also listens for STOP).
{% endhint %}


# SMS with Twilio

### Getting Started

In order to send review requests over SMS, you can use your own Twilio account. You can register [here](https://www.twilio.com/), if you do not already have one. You will need to:

1. Register a phone number
2. Add the number to a messaging service
3. Register a campaign for your messaging service to be in compliance

You also need permission from each person before you text them. MGR handles STOP replies after you send. It does not collect consent for you. See [SMS Consent](/sms/sms-consent).

For help from Twilio on getting started with your account, you can read [Milestones For Onboarding your SMS Project to Twilio](https://www.twilio.com/en-us/blog/insights/best-practices/milestones-onboarding-your-sms-project-to-twilio).

### Integration with MGR

When you create a new messaging service, you'll get an SID (string identifier) for it. You'll need this, along with your account SID and auth token to connect the service to MGR. To establish the connection, go to your project integrations and click on the [Twilio integration](https://moregoodreviews.com/settings/integrations/twilio). Add:

1. Your account [auth token](https://help.twilio.com/articles/223136027-Auth-Tokens-and-How-to-Change-Them)
2. Your account SID
3. Your messaging service SID

This is all that is needed to set up SMS with Twilio on our end. If all your credentials are correct, and your account has a working and approved messaging service, you are just about done.

{% hint style="info" %}
If you need help setting up your messaging service on Twilio, [read this guide](https://help.twilio.com/articles/223181308-Getting-started-with-Messaging-Services).
{% endhint %}

### Webhook for Delivery Status & Unsubscribing

In order for MGR to know if a message was delivered, as well as listen for the STOP keyword to unsubscribe, you will need to add a callback URL in your messaging service's settings. This URL is provided to you when integrating Twilio with MGR on the integration page.

Copy the Incoming Webhook URL from MGR and then paste that into the field for Callback URL in the Delivery Status Callback section for your messaging service's integration settings on Twilio.

You should also paste the URL in the field for Send a Webhook > Request URL in the Incoming Messages section. Use POST as the method.


# SMS with SimpleTexting

### Getting Started

In order to send review requests over SMS, you can use your own SimpleTexting account. You can register [here](https://www.simpletexting.com/), if you do not already have one. You will need to:

1. Activate a phone number
2. Register your number to be in compliance
3. Request API access in Integrations > API & Webhooks

All of these steps can be done in a single day. You can read about the steps to [registering a number](https://help.simpletexting.com/en/articles/4729632-how-to-register-your-local-number-with-simpletexting) with SimpleTexting and [requesting API access](https://help.simpletexting.com/en/articles/1040620-can-i-try-your-api) on their Help Center. SimpleTexting is known for a quick and speedy registration process compared to other SMS providers.

You also need permission from each person before you text them. MGR handles STOP replies after you send. It does not collect consent for you. See [SMS Consent](/sms/sms-consent).

### Integration with MGR

Once you have your activated phone number and your API token, you are ready to connect your account to MGR to request reviews over SMS. To establish the connection, go to your project integrations and click on the [SimpleTexting integration](https://moregoodreviews.com/settings/integrations/simpletexting). Add:

* Your phone number (digits only)
* Your API token

This is all that is needed to set up SMS with SimpleTexting on our end. If your credentials are correct, and your account has an activated and registered number, you are just about done.

{% hint style="info" %}
You may need to reach out to SImpleTexting support to increase customer and inbox limits on their end. If you are seeing failed messages in MGR, this is likely the cause.
{% endhint %}

### Webhook for Delivery Status & Unsubscribing

In order for MGR to know if a message was delivered, as well as listen for the STOP keyword to unsubscribe, you will need to add a new subscription in the [Webhooks](https://app2.simpletexting.com/integrations/webhooks) section on SimpleTexting. This URL is provided to you when integrating SimpleTexting with MGR on the integration page.

Copy the Incoming Webhook URL from MGR and then paste that into the field for Target URL when creating a new webhook subscription. For triggers, select:

* Incoming Message
* Outgoing Message
* Delivery Report
* Non-Delivered Report
* Unsubscribe Report

Do this for "All Messages" and save the webhook subscription.


# SMS with ClickSend

### Getting Started

In order to send review requests over SMS, you can use your own ClickSend account. You can register [here](https://www.clicksend.com/), if you do not already have one. You will need to:

1. Locate your API key and username (email address) in Developers > API Credentials
2. Locate your user ID in the header of the console
3. Buy and register a phone number if you are sending in US or Canada

ClickSend uses a shared number if you are sending outside of US and Canada, so it may not be necessary for you to purchase one. You can also add multiple numbers to your account, and ClickSend will automatically use the best number for the customer you are sending the SMS to.

You also need permission from each person before you text them. MGR handles STOP replies after you send. It does not collect consent for you. See [SMS Consent](/sms/sms-consent).

### Integration with MGR

Once you have created your ClickSend account, you can integrate it with MGR and start sending messages right away. To establish the connection, go to your project integrations and click on the [ClickSend integration](https://moregoodreviews.com/settings/integrations/clicksend). Add:

* Your user ID
* Your username (email address)
* Your API key

Your ClickSend user ID is located in the header of the console in the profile dropdown menu. Your username and API key can be found in Developers > API Credentials.

### Webhook for Delivery Status & Unsubscribing

In order for MGR to know if a message was delivered, as well as listen for the STOP keyword to unsubscribe, you will need to add a new [Inbound Rule](https://dashboard.clicksend.com/messaging-settings/sms/inbound-sms) and [Delivery Report Rule](https://dashboard.clicksend.com/messaging-settings/sms/delivery-reports) on ClickSend. The URL for each rule is provided to you when integrating ClickSend with MGR on the integration page. The rules can be found in the Messaging Settings section, which you can access from the profile dropdown in the header of the console.

#### Inbound Rule

Create a new rule for any number and any message, and set the action to URL. Enter the Incoming Webhook URL provided to you on the MGR integration page, and save the rule.

#### Delivery Report URL

Create new rule to match all reports, and set the action to URL. Enter the Incoming Webhook URL provided to you on the MGR integration page, and save the rule.


# SMS with TextLink

### Getting Started

In order to send review requests over SMS, you can use your own TextLink account. You can register [here](https://textlinksms.com/signup), if you do not already have one. You will need to:

1. Pair a spare Android phone with a SIM or eSIM using the TextLink app
2. Keep that phone powered on and connected to the internet
3. Copy your API key from the [API console](https://textlinksms.com/dashboard/api)

TextLink sends through a spare Android phone and your own SIM. That is different from Twilio, SimpleTexting, and ClickSend, which use registered business numbers. You still need permission before you text anyone. See [SMS Consent](/sms/sms-consent). Setup details are in their [Android setup guide](https://docs.textlinksms.com/).

{% hint style="warning" %}
Using your own SIM does not skip consent rules, and it does not replace carrier registration that may still apply to your traffic. If you need a registered US business messaging setup, use [Twilio](/sms/sms-with-twilio), [SimpleTexting](/sms/sms-with-simpletexting), or [ClickSend](/sms/sms-with-clicksend).
{% endhint %}

### Integration with MGR

Once you have a paired device and your API key, you are ready to connect your account to MGR to request reviews over SMS. To establish the connection, go to your project integrations and click on the [TextLink integration](https://moregoodreviews.com/settings/integrations/textlink). Add your API key.

This is all that is needed to set up SMS with TextLink on our end. If your credentials are correct and your Android gateway is online, you are just about done.

### Webhook for Failures & Unsubscribing

In order for MGR to mark failed messages and listen for the STOP keyword to unsubscribe, you will need to paste the Incoming Webhook URL from the TextLink integration page into your [TextLink API console](https://textlinksms.com/dashboard/api). Use the same URL for:

* Received messages
* Failed messages

Save, then use **Test webhooks** in TextLink if you want to confirm the endpoint responds.

{% hint style="info" %}
TextLink does not provide a correlatable delivery receipt webhook. Messages that send successfully will show as sent in MGR; failures and STOP/START replies are handled via the webhooks above.
{% endhint %}


# Profile and Settings

Manage your profile, password, two-factor authentication, and display preferences.

Your profile and settings let you manage your account details, secure your account with two-factor authentication, and customize how the platform looks and feels. Everything on this page applies to your user account across all projects.

### Where to Find It

Click **Account** in the sidebar (or your profile icon in the header), then click **Profile**. You'll see several sections: Profile, Settings, Change Password, and Two-Factor Authentication.

***

### Profile

The Profile section shows your basic account information. You can update your first name, last name, and email address. If your email is not yet verified, a **Verify** button appears—click it to receive a verification link. After you verify, the button disappears.

1. Edit your first name, last name, or email.
2. Click **Save** to apply your changes.

{% hint style="info" %}
Your name and email appear in messages and notifications. Keep them up to date so your team and customers see the correct information.
{% endhint %}

***

### Settings

The Settings section lets you customize how the platform appears to you. You can choose a theme and language.

* **Theme** – Choose System (follows your device), Light, or Dark. The interface updates immediately when you save.
* **Language** – Select your preferred language. The page may reload after you save if the language changes.

1. Select your theme and language.
2. Click **Save** to apply your changes.

***

### Change Password

Use this section to update your password. You'll need your current password to sign in after changing it.

1. Enter your new password in the **New password** field.
2. Enter the same password again in the **Confirm new password** field.
3. Click **Save**.

{% hint style="success" %}
After you save, your password is updated. Use the new password the next time you sign in.
{% endhint %}

***

### Two-Factor Authentication

Two-factor authentication (2FA) adds an extra layer of security to your account. When enabled, you'll need your password plus a code from an authenticator app (such as Google Authenticator or Authy) to sign in.

#### Enabling 2FA

1. Click **Generate QR code**.
2. Scan the QR code with your authenticator app, or enter the security code manually if your app supports it.
3. Enter the 6-digit code from your app in the **Security code** field.
4. Enter your password to confirm.
5. Click **Save**.

Once enabled, you'll see a success message. The next time you sign in, you'll be asked for a code from your app.

#### Disabling 2FA

If you need to turn off two-factor authentication, click **Disable** at the bottom of the section. You'll need to confirm. After that, you can sign in with just your password again.

{% hint style="warning" %}
If you lose access to your authenticator app, you may not be able to sign in. Keep your recovery codes or backup method in a safe place.
{% endhint %}

***

### Delete Account

At the bottom of the page, you'll find an option to delete your account. This permanently removes your account and all associated data. This action cannot be undone.

{% hint style="danger" %}
Deleting your account is permanent. All your projects, customers, reviews, and settings will be removed. If you manage a space, your team members may lose access. Contact support if you have questions before proceeding.
{% endhint %}


# Spaces and Projects

Manage your workspaces and projects. Create spaces, add projects, and switch between them.

Spaces are workspaces that hold your projects. Each project represents one business or brand you collect reviews for. Multiple stores or sites under that brand belong as [locations](/platform/projects/locations) inside the project. You can create multiple spaces, add projects to them, and switch between projects as you work. If you were invited to a project by someone else, you may see spaces you don't own. You can leave those when you no longer need access.

### Where to Find It

Click **Account** in the sidebar (or your profile icon in the header), then click **Spaces**. You'll see all your spaces listed. If you don't see Spaces, you may be a sub-account (for example, an agency client). Sub-accounts only see the projects they were invited to and manage them from the project selector.

***

### What Are Spaces and Projects?

* **Space** – A container for one or more projects. Think of it as a folder. You might have one space for your own businesses and another for a side venture. Agency users may have a space for their agency with client projects inside.
* **Project** – A single business or brand. Each project has its own customers, reviews, review pages, settings, and locations. See [Projects](/platform/projects) for more on what a project contains.

When you sign up, you get one space with one project. You can add more of each as your needs grow.

***

### Creating a Space

1. Go to **Account** > **Spaces**.
2. Click **Create Space**.
3. Enter a name for your space (for example, "My Businesses" or "Client Projects").
4. Click **Create**.

Your new space appears in the list. It starts empty—add a project to get started.

{% hint style="info" %}
**Business** and **Agency** include unlimited spaces. If you don't see the Create Space button or get an upgrade message, upgrade your plan.
{% endhint %}

***

### Editing a Space

To change a space's name or manage its projects and members:

1. Go to **Account** > **Spaces**.
2. Find the space you want to edit.
3. Click **Edit** on that space.

You'll see the space detail page with:

* **Space** – Edit the space name and click Save.
* **Projects** – View projects in this space and add new ones.
* **Members** – See who has access and invite others (if you're the space owner).

Only the space owner (or an agency admin for agency spaces) can edit the space. If you were invited to the space, you'll see **Leave** instead of **Edit**.

***

### Adding a Project

You can add a project when creating a new space (some flows create both at once) or to an existing space:

1. Go to **Account** > **Spaces**.
2. Click **Edit** on the space you want to add a project to.
3. In the Projects section, click **Add Project**.
4. Enter a name for your project (for example, your business or brand name).
5. Optionally assign members or invite someone to the project.
6. Click **Create**.

Your new project appears in the space. You'll be taken to the dashboard for that project so you can start setting it up.

{% hint style="info" %}
Each project is independent. Customers, reviews, and settings in one project do not affect another. If you manage several stores for the same brand, add them as [locations](/platform/projects/locations) in one project. Create a separate project when the brand, website, or client is different.
{% endhint %}

***

### Switching Between Projects

When you have more than one project, use the project selector in the header. Your current project's name appears there. Click it to see a list of all projects you can access. Click another project to switch. Your view, sidebar, and data all update to that project.

***

### Leaving a Space

If you were invited to a space by someone else (for example, a client or partner), you'll see a **Leave** button on that space. Click **Leave** to remove yourself from the space. You'll lose access to all projects in that space. This does not delete the space or its projects—only your access is removed.

{% hint style="warning" %}
Leaving a space is permanent for your access. You'll need to be invited again to get back in. Make sure you've exported any data you need before leaving.
{% endhint %}

***

### Deleting a Space

Space owners can delete a space from the space detail page. At the bottom of the page, use the delete option. This permanently removes the space and all projects inside it. This action cannot be undone.

{% hint style="danger" %}
Deleting a space removes all projects, customers, reviews, and settings in that space. Team members will lose access. Only do this if you're sure you no longer need the data.
{% endhint %}


# Billing and Upgrading

View your plan, upgrade or change plans, and manage your subscription and payment method.

The billing page shows your current plan, how much of your limits you've used, and lets you subscribe, change plans, or manage your subscription. You can update your payment method, cancel your subscription, or (on Agency) add extra locations.

### Where to Find It

Click **Account** in the sidebar (or your profile icon in the header), then click **Billing**. You can also reach billing from **Upgrade** buttons that appear when you hit a limit, for example when creating a new location or project. Those buttons take you straight to the billing page so you can choose a plan that includes the capacity you need.

{% hint style="info" %}
If you don't see Billing in the Account menu, you may be a sub-account (for example, an agency client). Billing is managed by the account owner.
{% endhint %}

***

### Usage

At the top of the billing page, you'll see your current usage for:

* **Requests** – How many review requests you've sent this month compared to your plan limit.
* **Locations** – How many locations you have compared to your plan limit.

Your location count includes every location across your projects. A project with no locations yet still counts as one seat, so empty projects use capacity the same way a single-location project would.

If you're close to a limit, increase your Business location quantity, add Agency extra locations, or free up capacity by removing locations (or unused projects) you no longer need.

***

### Your Plan

The **Your Plan** section shows your active subscription. You'll see each line item with:

* **Plan name** – The plan or add-on you're on. Older plans that are no longer sold may show as **Legacy Plan**.
* **Price** – The per-location (or per-unit) rate for your current quantity, and how often you're billed (monthly or yearly).
* **Quantity** – How many locations or extra locations are on that line item.
* **Status** – When your plan renews or, if you've canceled, when it ends.
* **Actions** – Edit quantity (when available), or cancel.

If you've canceled, a notice at the top of this section shows the date your subscription ends. You keep full access until that date.

#### Managing Your Subscription

Click **Manage subscription** at the top of the billing page to open the billing portal. There you can:

* Update your payment method (card on file).
* View invoices and payment history.
* Manage subscription details available for your plan.
* Cancel your subscription.

#### Canceling Your Subscription

Click **Cancel subscription** to stop your subscription at the end of the current billing period. You'll keep access until the period ends. After that, your account may move to a free plan or be restricted based on your usage. You can resubscribe anytime before the period ends to keep your plan active.

***

### Plans

MGR offers two paid plans. Open **View all features** on the billing page (or the public pricing page) for a full comparison.

#### Business

**Business** is for companies that run their own reputation work. Pricing is per location, with volume discounts as you add more (starting from $59/location/month, or $49/month if you pay yearly). You can choose **Monthly** or **Yearly** billing. Yearly includes two months free.

When you subscribe, use the location selector to pick a volume band (for example, 1–10 locations or 11–20). Each location includes **5,000 review requests per month**. For example, 3 locations means 15,000 requests that month. You can change the quantity later from **Your Plan** or by clicking **Update Plan** on Business.

Business includes AI tools, unlimited customers, projects, review pages, and widgets, custom email and review page domains, Google Business Profile and Facebook, SMS (with your own provider), all integrations, and API and MCP access.

#### Agency

**Agency** is for marketing agencies that white label MGR for clients. It is **$99/month** and includes **5 locations** and **25,000 review requests per month**. You can add **extra locations** for **$12/month** each. Each extra location adds **5,000 more requests** per month. Agency is **monthly only**.

When you subscribe, use the location selector to start with the 5 included locations, or choose extra locations so checkout includes those seats up front.

Agency includes everything in Business, plus the white-label client portal, custom agency domain, client invites, agency team seats, per-project overrides, and Agency API access.

{% hint style="warning" %}
You cannot switch between **Business** and **Agency** on the same account. If you need the other plan family, create a new account. The button shows **Requires New Account** when a switch isn't allowed. Older Starter or Growth plans are treated like Business for this rule, so Agency also requires a new account if you're on a legacy plan.
{% endhint %}

#### Subscribing or Changing Plans

* **Subscribe** – If you don't have a paid plan yet, choose your location band (Business) or included extras (Agency), then click **Subscribe**. You'll be taken to checkout to enter your payment details. Checkout won't let you pick fewer locations than you're already using.
* **Update Plan** – If you already have a subscription, click **Update Plan** on the plan you want (for example, Business monthly to yearly). Confirm the quantity and update in the dialog that appears.
* **Your Plan** – Your active plan is marked **Your Plan** and can't be selected again. Use **Manage subscription** or **Edit** on a line item when you need to make changes.

{% hint style="info" %}
Quantity cannot go below the number of locations already on your account. Delete unused locations under **Settings > Locations** (or remove unused projects) before lowering your plan quantity.
{% endhint %}

***

### Add-Ons

Add-ons appear when you're on an **Agency** plan. The available add-on is **extra locations**, billed at $12/month per location on top of the 5 included with Agency. Each extra location adds **5,000 monthly review requests**.

Click **Add** on the add-on, set the quantity you need, and confirm. You can edit the quantity later from **Your Plan**.

Business plans do not use this add-on. Location capacity is controlled by your Business quantity instead.

***

### Legacy Plans

If you're on an older plan (for example, a retired Starter or Growth plan), it still works and may appear as **Legacy Plan** in **Your Plan**. Those plans are no longer available for new subscriptions. You can keep your current plan, manage payment details in the billing portal, or move to **Business** when you're ready. Moving to **Agency** requires a new account.

Legacy plans don't support changing location quantity in the app. To change capacity, cancel the legacy plan (or wait until it ends) and subscribe to Business, or contact support if you need help migrating.

***

### Feature Limits and Upgrade Prompts

Your plan determines how many locations, review requests, and other features you can use. When you hit a limit, you may see **Upgrade** badges or messages in the app. Clicking them takes you to the billing page so you can increase capacity or choose a plan that includes what you need. Changes apply as soon as the update succeeds.

{% hint style="success" %}
If you're not sure which plan fits, check the pricing page for a full comparison of features and limits. You can reach it from the billing page or the main site.
{% endhint %}


# White Label

Offer reputation programs under your brand with a client portal, domains, roles, and shared outreach pools across projects.

## What it does

Marketing agencies use white label to give **their own clients** a branded place to manage **reviews**, **ratings**, and **feedback**—without our branding showing through. You control how the portal looks and who may enter it; your clients focus on day-to-day **reputation** work inside the businesses you set up for them.

{% tabs %}
{% tab title="Agency customer" %}
You paid for the **Agency** plan and will spend most of your admin time under **Agency** in the console header after you upgrade.
{% endtab %}

{% tab title="Direct customer" %}
You run your own business inside a single account and never need this page—stay in your project menus for customers, review requests, and reviews.
{% endtab %}
{% endtabs %}

***

## How to use it

1. Subscribe to the **Agency** plan from [Billing](/accounts/billing-and-upgrading). Agency includes 5 locations and 25,000 monthly review requests, then you can add extra locations as you grow. Agency is monthly only, and you cannot switch from Business on the same account.
2. Click **Agency** at the top of the console to open your agency workspace.
3. Before sending invites, add **Projects**—each row is usually one client business you operate for someone else. Put that client's stores under [locations](/platform/projects/locations) inside their project.
4. Use **Clients** to email invitations so outside contacts may sign in only on **your** portal and only into the projects you picked.
5. Use **Team** for **your internal coworkers** who should see every client; keep paying portal users under **Clients** instead.
6. Choose **Settings**, **Appearance**, then **Domain** so your name, colors, footer text, and web addresses line up. Finish **Domain** early so links and invites stop pointing people at the default host.
7. Optionally open **SSO** after the client portal hostname is active if you want invited clients to sign in with their company login.
8. When needed, open **Email** to edit notification wording, **External links** for extra sidebar shortcuts, or **Code editor** if you want finer layout tweaks. Each screen matches the labels you already see.
9. If your plan shows extra automation choices under **Agency**, review what each screen offers. Turn off or renew anything you no longer recognize.

***

## What to expect

* Finished branding and domains mean invitation mail and the sign-in experience carry **your** company identity.
* Every portal user stays tied to the **projects** you assigned; they do not browse unrelated businesses.
* **Team** seats behave like staff backstage; **Clients** behave like customers in the house—keep those roles separate.
* Email and text **review requests** share **one account-wide allowance** (25,000 on Agency, plus 5,000 per extra location). Lower busy outlets by opening each project’s **strategy** limits and setting daily or monthly caps so quieter clients still get airtime.

{% hint style="warning" %}
If **Domain** is unfinished, people may still pass through the default platform address. Finish domain setup in the Agencies part of this guide before polished onboarding.
{% endhint %}

***

## Tips & common questions

{% hint style="success" %}
Pair **one paying customer** with **one primary project** most of the time. Add more projects only when that relationship truly spans multiple locations or brands you bill separately.
{% endhint %}

{% hint style="info" %}
Invitations lapse after roughly **one week**, yet you can **resend** them anytime from **Clients** or **Projects**. Your customer always chooses their own password—you never receive it.
{% endhint %}

{% hint style="warning" %}
You **invoice clients yourself**. Pick whichever bookkeeping or card processor you already trust and set service prices on your own.
{% endhint %}

{% hint style="danger" %}
Removing or pausing the wrong **project** can halt live outreach for that business. Read the confirmation text slowly before you agree.
{% endhint %}


# Domain Setup

Configure agency domains for email, client portal, widgets, images, and API so white label reputation and review tools stay on brand.

## What it does

Domain setup is what turns your agency account into a true white label experience. You connect **your** web addresses for outbound email, the **client portal** where customers sign in, and optional addresses for **widget** embeds, **image** hosting, and the **API**. When these are in place, **review requests**, **feedback** links, and **reputation** touchpoints reflect your brand instead of the default platform host.

***

## How to use it

1. Open **Agency** in the console header, then click **Domain**.
2. Work through the page from top to bottom. Start with **White Label Sending Domain**, then each **White Label** section for the portal, widget, images, and API.
3. For every block, copy the DNS values shown into your domain host, save there, then return and click **Verify** when the screen offers it. Status moves from pending to active when propagation and checks finish.
4. Use **Download records** at the bottom if you want a single file that lists everything you still need at your DNS provider.

### Sending domain (**White Label Sending Domain**)

This is the address used to send platform email to your team and clients (notifications, invites, reports) and to send **review request** and customer-facing mail on behalf of client projects that do not have their own sending domain yet.

1. Enter the domain fragment the form asks for. The product builds a full sending hostname using an **`agency.`** prefix on your domain (you will see the exact value on screen after you save).
2. Add the **TXT** and **MX** records listed for that domain. They authorize Mailgun, the service that delivers mail for this product, to send as you. **MX** rows are optional but help **inbox** placement; skipping them can hurt deliverability on some providers. Because the records use a dedicated subdomain, they do not replace normal mail for your main website address.
3. Add **DMARC** using the **TXT** row shown in the **DMARC** section, then click **Verify** there once your DNS has the value.
4. This hostname is for **sending mail only**. Typing it in a browser will not show a website. That is expected.

{% hint style="info" %}
When each client project has its own **sending domain** under **Settings** in that project, **review** and customer email for that business can come from **their** domain instead of your agency sending domain.
{% endhint %}

{% hint style="danger" %}
If you skip a custom sending domain, mail to your clients still goes out from **<notifications@moregoodreviews.com>** instead of your brand.
{% endhint %}

### **Switch to SMTP Setup** (optional)

At the top of **Domain** you can switch from the standard email setup to **SMTP Setup** if your organization routes mail through its own mail server. That path replaces the DNS-based sending domain block with fields for host, port, username, and password shown on the same page. Most agencies stay on the standard setup unless IT has already chosen SMTP.

### CNAME-style domains (portal, widget, images, API)

Everything below the sending domain on **Domain** uses the same pattern. Each is a **subdomain you choose** (for example `customers.myagency.com`) that points at our platform. For each one you add:

1. Type the full hostname the section asks for and click **Add**.
2. Create the **CNAME** at your DNS host so it points to the **hosting** target shown in the instructions on screen.
3. Wait for the **TXT** record used for secure **HTTPS** to appear in the console (it can take a few minutes). Add that **TXT** row too.
4. Click **Verify** until the section shows **active**.

The four sections are:

* **White Label Client Portal.** Where your **clients** sign in. This host is also used as a fallback for **review** pages and **showcase** experiences when a client has not set their own customer-facing domain on a project. When this hostname is active, client projects can also use it for a **Custom URL** button link in **Settings > Email > Review Link**.
* **White Label Widget Tag.** Appears inside the **embed code** for widgets, so pick something you are comfortable **clients** seeing in snippets.
* **White Label Image URLs.** Serves uploaded **images**. People rarely notice it unless they inspect how a page loads.
* **White Label API.** Optional separate host if you expose integrations under your brand.

After **White Label Client Portal** is active, use **Cookie Consent Banner** to choose who sees the consent prompt on that hostname:

* **Show to everyone** displays the banner to all portal visitors.
* **Show to EEA & UK visitors only** limits the banner to visitors in the European Economic Area and United Kingdom.
* **Do not show** turns the banner off. Choose this if you handle consent through **JavaScript** in **Code Editor** instead.

Click **Verify** to save your choice along with any DNS updates.

{% hint style="warning" %}
If you use **Cloudflare**, turn **off** proxying (the orange cloud) on the **CNAME** you create for these hostnames so validation and certificates can complete.
{% endhint %}

{% hint style="danger" %}
Without a **White Label Client Portal** hostname, the product is not fully white labeled. **Clients** are sent through the default **moregoodreviews.com** address to create accounts and sign in.
{% endhint %}

***

## What to expect

* DNS can take minutes or, in rare cases, up to a day to propagate. Pending states are normal right after you save changes at your DNS host.
* Until **HTTPS** verification finishes, a new hostname can look broken in the browser even when the **CNAME** is correct. Finish the **TXT** step and use **Verify** again after a short wait.
* If you add a **CNAME-style** hostname (portal, widget, images, or API) but never finish DNS and SSL setup, customer-facing links keep using the default platform address. After an extended period with incomplete setup, you have **7 days** to complete the **CNAME** and **TXT** records and click **Verify**. If setup is still incomplete after that time, the hostname is removed automatically. You can add it again from **Agency** > **Domain** at any time.
* After the sending domain and **DMARC** verify, new mail can begin using your domain for **from** addresses; exact **from** names and reply behavior are adjusted in **Email** settings elsewhere in the console.
* A green or success state on each block means that hostname is live for its purpose (portal login, widgets, images, or API, depending on the section).

***

## Tips and common issues

{% hint style="info" %}
If a **TXT** row for **HTTPS** never appears or disappears before you copy it, remove the hostname in our console and add it again to generate a fresh value.
{% endhint %}

{% hint style="warning" %}
If a **CNAME** stays stuck in pending after you are sure both the **CNAME** and **TXT** are correct, your DNS provider may be blocking automatic certificates. Some providers need extra **CAA** permission for Google trust services before validation succeeds. Your DNS or IT team can confirm whether **CAA** rules are in the way.
{% endhint %}

{% hint style="warning" %}
Finish DNS setup soon after adding each white label hostname. Incomplete setups may be removed automatically after you receive a setup warning.
{% endhint %}

{% hint style="success" %}
Finishing **White Label Client Portal** and **White Label Sending Domain** first removes the most visible "default platform" touches from invitations, sign-in, and **reputation** outreach.
{% endhint %}


# Inviting Clients

Invite portal clients to chosen projects, roles, and sidebar areas for reviews and messaging without full agency controls.

## What it does

You invite **Clients** so outside businesses may sign in to **your** white-label portal, pick among the **projects** you assigned, and work inside **reviews**, **ratings**, **feedback**, **messages**, **customers**, and daily **reputation** tasks without gaining your full agency controls.

***

## How to use it

1. Make sure each person has at least **one project** to land in after they accept.
2. Choose where you start the invite:

{% tabs %}
{% tab title="Agency Clients" %}
Open **Agency**, then **Clients**, and click **Invite Client**. Enter their email, pick **Admin**, **Manager**, **Operator**, or **Viewer**, choose **Projects**, expand **Sections** to clear anything they should not buy yet, then send the invitation.
{% endtab %}

{% tab title="Create Project" %}
Click **Agency**, **Projects**, **Add**, then expand **Invite Client** inside **Create Project**. Fill their email, trim **Sections** if needed, and finish **Create**. They arrive as **Manager** unless you later edit them under **Clients**.
{% endtab %}

{% tab title="Project Members" %}
Enter the project, open **Settings**, **Members**, then **Invite Member**. You attach them to that project automatically, but you still choose **Admin**, **Manager**, **Operator**, or **Viewer**. Today this path skips section checkboxes, so every sidebar destination stays available until you tighten access under **Agency**, **Clients**.
{% endtab %}
{% endtabs %}

3. Ask them to watch their inbox, accept the invite, and finish signup on **your** portal domain once DNS and sending setup are complete. If you enabled **SSO** under **Agency**, they can also use **Sign in with SSO** on that portal after the invite exists. If **Require SSO** is enabled, they must use that button.

***

## What to expect

* Portal users always pick an active **project** before they work. Multiple assignments mean they may switch projects from the selector you expose in the console.
* Invitations mention how many days remain before expiry. Many installs allow roughly **thirty days**, but trust the number printed in that email.
* Pending rows show **Invited** with a paper plane icon. Failures show a warning triangle instead. Click **Edit**, then **Resend Invite** after fixing the email or inbox issue.
* After they join you see **Joined** plus timestamps. Teammates with extra sign-in protection may show a note beside their name.
* **Owners** and **Super Admins** open **Edit** on any client row to adjust **Projects**, **Sections**, or role. A client **Admin** can edit or remove managers, operators, and viewers on a project’s **Members** screen. **Managers** invite from **Settings**, **Members**, and only receive **Edit** on their own row.
* **Remove** sits beside **Save** for anyone who should lose portal access entirely.

{% hint style="info" %}
Invitations never create passwords for them. They choose credentials during signup unless you turned on **Require SSO**. You do **not** receive their password. If email sign-in is still available, point stuck users to **Forgot Password** on your portal sign-in screen. If **Require SSO** is enabled, they must use **Sign in with SSO** instead.
{% endhint %}

{% hint style="warning" %}
People cannot create an account or sign in on your portal until you invite them. Without a pending invite, signup and login both show an error. Google sign-in is not available on the white label portal. Clients use email and password, or **Sign in with SSO** if you enabled it. With **Require SSO** enabled, they must use **Sign in with SSO** only.
{% endhint %}

***

## Tips & common questions

{% hint style="success" %}
Need someone who should jump across **every** customer brand with billing controls? Use **Agency**, **Team**, instead of **Clients**.
{% endhint %}

{% hint style="info" %}
Trying to invite the same email while a pending invite still exists triggers an error. Open **Edit** on that row and click **Resend Invite**, or **Remove** the old seat before sending a fresh one. Fully joined accounts need different handling if you see a duplicate error.
{% endhint %}

{% hint style="warning" %}
Expect an upgrade prompt when your plan caps seats. Raise the allowance or remove inactive **Clients** before adding more.
{% endhint %}

{% hint style="danger" %}
Clicking **Remove** instantly pulls portal access. Export anything you still need from their **projects** before you confirm if audits matter.
{% endhint %}


# Inviting Team Members

Invite coworkers as Super Admin on every client project for reviews, ratings, feedback, and messaging. Separate from Clients with limited access.

## What it does

You use **Agency** and **Team** to invite coworkers who run your agency alongside you. Each person becomes **Super Admin** with full reach across every customer project and sidebar section so they can help with **reviews**, **ratings**, **feedback**, **messages**, **customers**, and overall **reputation** work.

{% tabs %}
{% tab title="Teammates on Team" %}
They receive **every project** you already manage and **every project you add later**. They also see **every console section** by default. Use this path for payroll staff, fulfillment leads, or partners who truly operate your whole portfolio.
{% endtab %}

{% tab title="Clients on Clients" %}
You choose **which businesses** they open and **which sidebar sections** appear. Use **Clients** for paying customers who should **not** browse your entire agency footprint.
{% endtab %}
{% endtabs %}

***

## How to use it

1. Click **Agency** in the header, then open **Team**.
2. Click **Invite Team Member**. If you are an **Owner** or **Super Admin**, you should see this button when your plan allows more seats.
3. Enter your coworker’s email and send the invitation. When your domain and mailbox setup are finished, the email generally matches your branding.
4. Ask them to accept from their inbox, then finish joining on **your** client portal. They create a password there unless you enabled **Require SSO**, in which case they use **Sign in with SSO**.

***

## What to expect

* **Super Admin** teammates can open every client project, agency settings, and project capacity limits. Billing stays with the owner’s account.
* The invitation **does not prefabricate their password**. They finish signup themselves.
* Pending invites show a paper plane icon with text such as **Invited** and how long ago it went out. If delivery fails, you see a warning icon instead. Open their row, then click **Resend Invite** after correcting the email or inbox issue.
* After they join, you see **Joined** and how long ago they arrived. Extra sign-in protection may appear beside their name when they tighten security on their profile.
* **Owner** accounts stay on the list but **Remove** only appears for teammates who are **not** **Owners**.

{% hint style="info" %}
Only **Owners** and **Super Admins** get **Edit** on each tile. Bring one of them in when someone needs **Resend Invite** or **Remove**. Passwords stay private. If email sign-in is available, direct teammates to **Forgot Password** on your portal sign-in screen if they get locked out. If you enabled **Require SSO**, they must use **Sign in with SSO** instead.
{% endhint %}

{% hint style="warning" %}
Because **Super Admin** teammates can open **every** client business, invite trusted operators only. Remove access quickly when employment ends so **reviews**, exports, and billing areas stay protected.
{% endhint %}

***

## Tips & common questions

{% hint style="success" %}
Sell packaged portal access instead of full agency control? Keep steering customers to **Agency**, **Clients**, where you can tune sections per offering.
{% endhint %}

{% hint style="info" %}
Invites lapse after about **thirty days**, same as client invitations. Open the teammate and click **Resend Invite** whenever someone waited too long.
{% endhint %}

{% hint style="warning" %}
When your plan caps seats, you may see an upgrade prompt. Either expand the allowance or remove inactive **Super Admin** teammates before adding more.
{% endhint %}


# Restricting Access

Cap outreach and feature limits per client project, narrow sidebar sections and roles, or suspend access when packaging or billing changes.

## What it does

You can shape **what each client project may consume**—review-request volume, counts of customers and locations, optional product areas—and **what each portal user sees** in the sidebar so your packages stay predictable. You may also **suspend** a whole project when billing stops while keeping the record available to your team.

***

### Sending Limits

Your account’s **review-request allowance** (email and SMS together) is shared across **every** project, so every client draws from the same pool. You throttle usage per project in either of these places—they edit the same underlying numbers:

1. Open the **project**, go to **Settings**, choose **Strategy**, then adjust **Limits** for daily and monthly email and SMS sends.
2. Or open **Agency**, choose **Projects**, open **Actions** on a row, then **Manage Overrides**. The first panel inside that window lists the same sending caps next to your feature caps.

Monthly caps should stay **at or above** the daily caps you enter; otherwise the form cannot save.

When a project hits its ceiling, sending waits until the next day or month. If a limit looks grayed out or refuses a high number, your own subscription ceiling or sending setup may be lower—contact support if you need a higher tier.

### Project Overrides

Beyond sending limits, you can cap **project-level features** so lighter packages stay light. Open **Agency**, **Projects**, **Actions**, **Manage Overrides**. The second panel holds the knobs below. Leave a field empty to fall back to the platform default for that item.

Only **owners** and **Super Admins** see **Actions** on each project tile. Other teammates cannot change overrides from here.

<table><thead><tr><th width="249" valign="top">Feature</th><th valign="top">Description</th><th valign="top">Default</th></tr></thead><tbody><tr><td valign="top">Customers</td><td valign="top">The number of customers a client may add to their project.</td><td valign="top">1,000,000</td></tr><tr><td valign="top">Locations</td><td valign="top">The number of locations a client may add to their project.</td><td valign="top">1,000</td></tr><tr><td valign="top">Members</td><td valign="top">The number of members a client may invite to their project.</td><td valign="top">100</td></tr><tr><td valign="top">Tags</td><td valign="top">The number of tags a client may add to their project, to be used to tag reviews.</td><td valign="top">100</td></tr><tr><td valign="top">Widgets</td><td valign="top">The number of published widgets a client may add to their project.</td><td valign="top">100</td></tr><tr><td valign="top">Links</td><td valign="top">The number of links to 3rd party review sites each review page may have.</td><td valign="top">20</td></tr><tr><td valign="top">Advanced review pages</td><td valign="top">Richer layout and field controls on review pages; disable for simpler tiers.</td><td valign="top">Enabled</td></tr><tr><td valign="top">API</td><td valign="top">Whether the project may use developer automation keys and built-in app connectors.</td><td valign="top">Enabled</td></tr><tr><td valign="top">Webhooks</td><td valign="top">Whether the project may send instant notifications out to connected outside systems.</td><td valign="top">Enabled</td></tr><tr><td valign="top">Powered by</td><td valign="top">Display a “powered by” badge on your clients’ customer-facing emails, pages, and widgets.</td><td valign="top">Hidden</td></tr></tbody></table>

{% hint style="info" %}
If you enter a feature limit above our system settings, it will return an error. If you need any of these limits raised, just reach out to support.
{% endhint %}

{% hint style="warning" %}
Saving **Manage Overrides** applies immediately for that project—give clients a heads-up before you remove automation access or slash caps they rely on for reviews and widgets.
{% endhint %}

### Section Access

When you invite someone from **Agency → Clients**, you choose **which businesses** they may open and—via the **Sections** checklist—which sidebar destinations appear (Reviews, Messages, Widgets, and others). Leave premium areas unchecked if you plan to upsell them later.

You may also pick a **role** (Admin, Manager, Operator, or Viewer) when you invite a client. Viewers read more than they change. Operators sit in the middle. Managers can change settings and invite people. Admins can also edit or remove members below them.

After someone accepts, reopen their row under **Clients** anytime to adjust projects, sections, or role.

{% hint style="info" %}
Invites that start from **inside one project’s Members screen** attach every sidebar section automatically today. Use **Agency → Clients** when you need fine-grained section control at invite time.
{% endhint %}

### Suspending Projects

At any time, you can suspend a project by clicking **Actions → Suspend** in the **Agency → Projects** list. The usual reasons are unpaid invoices or an ended relationship—you keep historical data, but the client should not keep operating as if nothing changed.

Suspending a project will stop any review requests from going out and prevent any updates to it. That means no reviews or customers can be added, along with any other resource, like locations, sources, tags, etc. Additionally, it will stop any 3rd party integration from syncing with the platform.

You can unsuspend a project at any time by clicking **Actions → Unsuspend** in the projects list.

{% hint style="info" %}
**Suspended** is your explicit agency choice. A tile that reads **paused** reflects a separate billing or subscription state managed elsewhere in the product. Both stop day-to-day progress; keep suspend for situations you trigger on purpose when a client relationship ends or pauses for payment.
{% endhint %}

{% hint style="danger" %}
Suspension halts live outreach and imports immediately—confirm you chose the correct project name before you confirm.
{% endhint %}

***

## Tips & common questions

{% hint style="success" %}
Bundle overrides into clear packages (“Basic caps”, “Pro automation”) so support tickets stay predictable when clients upgrade.
{% endhint %}

{% hint style="info" %}
Duplicate a capped project from **Actions → Duplicate** when you want the same limits applied to a fresh client without retyping overrides by hand.
{% endhint %}


# Email Templates

White-label portal email copy for invites, review alerts, reports, imports, exports, syncs. Tweak appearance and sender settings.

## What it does

Agency **Email** controls the messages your **white-label** portal sends to **clients** and their **team members** about **reviews**, **ratings**, **feedback**, **imports**, **exports**, **invitations**, **password** recovery, **AI** replies, **weekly reports**, and **reputation** activity. You can match the tone of your brand while keeping layout and delivery consistent.

{% hint style="info" %}
Emails that ask an end **customer** to leave a **review** are edited inside each **project** under **Settings**, **Email**. This page only covers **agency** notifications to people who use your portal.
{% endhint %}

***

## How to use it

1. Open **Agency** in the sidebar, then click **Email**. You will see three sections, each with its own **Save** button.

### Templates

1. Use the dropdown at the top of **Templates** to pick which notification you want to edit.
2. Update **Subject**, **Title**, **Body**, and **Call to action** (the main button label) as needed. The body editor supports rich formatting.
3. Click **Save** for that template.

Use the placeholder chips or insert patterns like `{{project_name}}` where the editor offers them. They are filled in automatically when the message is sent (for example project name, date range, or review text).

{% hint style="info" %}
Available placeholders depend on the template you chose. If a field is not listed for that message, the platform does not substitute it there.
{% endhint %}

Click **Preview** to open a window with **desktop** and **mobile** layouts. You can switch templates inside the preview to compare them.

### Appearance

Under **Appearance**, choose **Text alignment** (left or centered) and **Font family** for these emails. Click **Save** when you are done.

### Settings

Under **Settings**, set **Sender name** and the **Sender email address** people see. You can add one or more **Reply-to** addresses; separate multiple addresses with commas.

If your **sending domain** is not active yet, the sender address field stays limited until you finish **Domain** setup. Use the link in the caption to open **Agency**, **Domain**, then return here after DNS is verified.

{% hint style="warning" %}
Until your own **sending domain** is connected and verified, notification mail may come from the platform default address instead of your brand. See **Domain Setup** for the full walkthrough.
{% endhint %}

***

## Notification types

These are the template names you will see in the dropdown, in plain language:

* **Customer Export Complete.** Sent when a bulk export of **customers** finishes and a download is ready.
* **Customer Import Complete.** Sent when a bulk import of **customers** finishes.
* **Member Invited.** The **invitation** when someone is asked to join your portal or a **space** you manage.
* **Password Reset.** Sent when a user starts a **password** reset.
* **Reply Sent.** Sent after **AI Tools** finishes replying to **reviews** for a **project**.
* **Report Created.** Sent when a **weekly report** is ready. You customize the **subject**, **title**, opening **body** line (often the date range), and **call to action**. Summary tables and metrics below that block are built for you.
* **Review Created.** Sent to **project** members who turned on **new review** notifications, when a **review** arrives. The standard wording includes the review date, **Customer Name**, **Location Name** when that applies, **Source Name**, the rating and score, project name, and the review text. If you customize this template, you can insert those details using placeholders (`{{customer_name}}`, `{{location_name}}`, `{{source_name}}`, `{{review_date}}`, `{{project_name}}`, `{{rating}}`, `{{score}}`, and `{{review}}`) with the variable chips in the editor.
* **Review Export Complete.** Sent when a bulk export of **reviews** finishes.
* **Review Import Complete.** Sent when a bulk import of **reviews** finishes.
* **Sync Complete.** Sent after an **integration** finishes syncing **customer** or **review** data.
* **Verify Email.** Sent to new signups to confirm their address.
* **Verify SMTP.** Sent when someone tests **SMTP** on a **project** to confirm outbound mail is working.

***

## What to expect

* Changes apply to the next send; past messages in inboxes do not change.
* **Templates**, **Appearance**, and **Settings** save independently. If you edit more than one section, click **Save** in each before leaving the page.
* **Preview** helps you check layout; it does not send mail to real inboxes from this screen.
* **Reply-to** must be valid addresses. Invalid entries can cause delivery or support issues for your **clients**.


# Customization Options

Brand client portals with logos, previews, footers, sidebar shortcuts, optional styling panels, and domain cookie switches tied to reviews.

## What it does

These controls change what **your clients see** after they sign in to **your** portal. Strong branding, helpful sidebar shortcuts, and clear footer messaging reinforce trust while they manage **reviews**, **ratings**, **feedback**, and everyday **reputation** work.

***

## How to use it

1. Click **Agency** in the header so every menu below belongs to your white-label shell.
2. Visit **Appearance** when you want visuals or social previews to carry your brand.
   * **Branding** guides you through light and dark **Logo** uploads, matching **Icon** uploads for compact spots, **Logo Height**, and **Primary Color**. Follow the on-screen size reminders so uploads succeed on the first try.
   * **Meta** holds **Title**, **Description**, and the wide **Image** people see when a portal link is shared in chat or social feeds. Save each block with **Save** before leaving.
3. Open **Settings** for wording that repeats on every screen or subtle trust badges.
   * Update **Agency Name** when your legal or marketing name changes. Clients notice it in emails and headings.
   * **Page Footer** accepts rich text for disclaimers, address lines, or policies that should appear under client workspaces.
   * **Powered by** lets you show a short credit with **Label** text and an optional **Link** if partners require attribution.
   * **Search Engines** switches between **Visible to Search Engines** and **Hidden from Search Engines** when you need the portal indexed or kept private.
4. Use **External Links** to stack helpful shortcuts beneath the built-in sidebar. Click **Add an External Link** or **Add**, fill **Label** and **Link**, press **Save**, and drag rows by **Move** until the order feels right. Remove mistakes with **Delete** after confirming the prompt.
5. Advanced teams open **Code Editor** for two stacked panels. The **CSS** area adjusts styling rules; the **JavaScript** area hosts snippets such as chat widgets or analytics helpers. Click **Save** on each panel independently after edits.
6. Set **Cookie Consent Banner** on the live **White Label Client Portal** hostname inside **Agency**, **Domain**. Pick **Show to everyone**, **Show to EEA & UK visitors only**, or **Do not show** if you embed your own consent tooling through **JavaScript** in **Code Editor** instead.

***

## What to expect

* Successful saves flash the standard success alert so you know each section persisted before you jump elsewhere.
* Branding uploads refresh immediately when possible so previews align with what clients receive on next login.
* External link ordering sticks soon after you drag entries because the platform resorts silently when you release the **Move** handle.
* **Verify** on **Domain** remains separate from cosmetic tweaks, yet cookie-banner preferences stay tied to that hostname panel once DNS turns active.

{% hint style="warning" %}
Bad snippets inside **JavaScript** can blank navigation or sign-in screens for everyone. Keep a staging mindset, paste trusted vendors only, and roll back quickly if layouts suddenly misalign.
{% endhint %}

***

## Tips & common questions

{% hint style="success" %}
Need notification wording instead of layout tweaks? Visit **Agency**, **Email** for template copy that rides along with review alerts and imports while keeping this page focused on visual polish.
{% endhint %}

{% hint style="info" %}
Pair a polished **Meta** image with an accurate **Description** so prospects understand your agency delivers ongoing **review** and **reputation** service before they ever click through.
{% endhint %}

{% hint style="danger" %}
Deleting an external link removes it for **every** logged-in client immediately. Export anything you might reuse elsewhere before you confirm **Delete**.
{% endhint %}


# Single Sign-On (SSO)

Let invited clients sign in to your white label portal with their company login from providers like Auth0, Okta, or Azure AD.

## What it does

Single sign-on (SSO) lets people you invite open **your** white label portal with their company login instead of only an email and password. You connect one identity provider under **Agency** > **SSO**. When it is enabled, the portal shows a **Sign in with SSO** button on both **Log in** and **Create account**. You can optionally turn on **Require SSO** so email and password sign-in are hidden and everyone must use SSO.

{% hint style="info" %}
SSO only appears on **your** white label portal domain. Day-to-day work on the main platform still uses email (and Google when available there). Google sign-in is not offered on the white label portal. Your agency owner, joined **Clients**, and joined **Team** members can use **Sign in with SSO** on that portal when the email from their provider matches their account.
{% endhint %}

***

## Before you start

1. Stay on the **Agency** plan.
2. Add **White Label Client Portal** under **Agency** > **Domain** and finish setup until that hostname is active. You cannot enable SSO until a client portal hostname exists, and people need that address to reach the portal.
3. Invite each person before they try SSO. Use **Agency** > **Clients** (or a project member invite) for outside clients, or **Agency** > **Team** for coworkers. Only invited people, people who already joined, and your agency owner may use the portal this way.

***

## How to use it

### Connect your identity provider

1. In your identity provider (for example Auth0, Okta, or Azure AD), create a public or single-page application for browser sign-in. Do not use a confidential server app that requires a client secret.
2. Open **Agency** in the console header, then click **SSO**.
3. Set **Let clients sign in with SSO** to **Enabled**. The **Issuer URL**, **Client ID**, **Redirect URI**, and **Require SSO** fields appear.
4. Copy the **Redirect URI** shown on the page and paste it into your identity provider’s allowed callback or redirect settings. Use that value exactly as shown. Do not replace it with your portal hostname.
5. From the provider, copy the **Issuer URL** and **Client ID**.
6. Paste them into the matching fields on **Agency** > **SSO**.
7. Optionally set **Require SSO** to **Enabled** if you want the portal to accept only SSO (no email and password forms).
8. Click **Save**.

{% hint style="warning" %}
If the **Redirect URI** in your provider does not match the value on this page, sign-in fails before people return to your portal.
{% endhint %}

### What your clients do

1. Open your **White Label Client Portal** address (the hostname you verified under **Domain**).
2. Click **Sign in with SSO** on **Log in**, or open **Create account** and click **Sign in with SSO** if they still need to finish joining after an invite.
3. Complete sign-in with their company login provider.
4. Return to your portal and continue into the **projects** you assigned.

When **Require SSO** is **Disabled**, email and password stay available on the same screens. When **Require SSO** is **Enabled**, only **Sign in with SSO** appears. Password recovery for that login happens with their company identity provider, not through the portal.

{% hint style="warning" %}
If SSO stops working while **Require SSO** is on, sign in on the main platform (not your portal), open **Agency** > **SSO**, and set **Require SSO** (or SSO itself) to **Disabled**, then click **Save**.
{% endhint %}

***

## What to expect

* After a successful **Save**, the portal shows **Sign in with SSO** when SSO is enabled and both **Issuer URL** and **Client ID** are filled in.
* With **Require SSO** set to **Enabled**, the email and password fields and the **Forgot Password** link are hidden on your portal. People must use **Sign in with SSO**.
* People who were never invited cannot create a portal account through SSO alone. They see an error and stay on the sign-in or signup screen.
* Joined **Clients** and **Team** members can use SSO on later visits as long as the email from their provider matches the account you invited.
* Turning **Let clients sign in with SSO** back to **Disabled** and clicking **Save** hides the SSO button until you enable it again. Your issuer and client values stay saved for when you turn it back on. **Require SSO** also turns off when SSO is disabled.

{% hint style="success" %}
If a client’s company already uses a shared login tool, SSO usually feels faster than creating yet another password for your portal.
{% endhint %}

***

## Tips & common questions

{% hint style="info" %}
**Issuer URL** should look like a normal website address for your provider (often starting with `https://`). If you paste a value without that prefix, the product adds it for you when you save.
{% endhint %}

{% hint style="warning" %}
Your identity provider must send the user’s **email** during sign-in, and that email should match the address you invited. If email is missing or different, SSO will fail.
{% endhint %}

{% hint style="warning" %}
SSO does not replace invitations. Send or resend invites from **Clients** or **Team** first, then ask people to use **Sign in with SSO** on your portal.
{% endhint %}

{% hint style="warning" %}
If **Save** fails with a message about adding a client portal CNAME, finish **White Label Client Portal** under **Domain**, wait until it is active, then try SSO again.
{% endhint %}

{% hint style="warning" %}
Turn on **Require SSO** only after you have confirmed that invited people can already complete **Sign in with SSO**. Otherwise they have no other way to enter your portal.
{% endhint %}

{% hint style="info" %}
Choose a public or single-page application type in your identity provider. Confidential apps that require a client secret will not work with this sign-in flow.
{% endhint %}


# API Reference

White-label Agency API - secret-key automation, live reference, and workflows for reviews, ratings, feedback, and reputation.

If you run a white-label [reviews and reputation](/agencies/white-label) business for clients, you can connect your own tools and workflows to your agency account. We call that connection the **Agency API**. It is for teams who already use the console every day and want to **automate agency-wide setup**—so adding businesses, aligning access, and keeping the client experience consistent does not all have to be done by hand.

Think of it as a secure bridge between your systems and your agency space in the product. Each **project** under your agency still represents one customer business you manage—for **review requests**, **ratings**, **feedback**, **reputation** programs, and everything else those clients do in the console. The connection does not replace the console; it helps you scale how you onboard people and tune what they are allowed to see.

Your agency has its own **secret key**. That key lets trusted automation act on behalf of your whole agency—across every customer business you host—not just a single location. It is similar in spirit to the secret key inside a single project’s settings, described in our [project automation reference](/platform/api-reference), except the agency key applies to the entire agency.

## The live reference on this page

Below this introduction, the same page includes an **interactive reference** that lists what the Agency API can do today: the operations you can perform, how to authenticate, and the shape of each request and response.

{% hint style="info" %}
That reference is generated from our specification and is updated as we expand or adjust the Agency API. Rely on it for the current, authoritative picture as details may change from time to time.
{% endhint %}

## What this connection is generally for

Typical uses include **provisioning and managing the businesses** you host under your agency, **controlling who is invited** and **what each person can open** in the console, and **keeping agency-level shortcuts and configuration** aligned with your own tools or processes. The exact actions available at any moment are spelled out in the interactive reference on this page—not duplicated here—so the documentation stays accurate as we ship improvements.

{% hint style="info" %}
This is separate from the secret key inside a single project’s settings. The project key only affects that one business. The agency key affects every project under your agency.
{% endhint %}

## Where to find it in the console

1. Open your account and use the **Agency** entry in the header (when your plan includes an agency).
2. In the agency sidebar, open **API**.
3. You will see the **API key** section with your **secret key** and a control that copies it to your clipboard.

If you do not see **API**, or the section is locked and asks you to upgrade, your current plan may not include this kind of automation for agencies. Upgrade or contact support as directed on screen.

{% hint style="success" %}
The **View documentation** button on that screen opens the [White label](/agencies/white-label) guide—helpful context for domains, branding, and what your clients see.
{% endhint %}

## How to obtain and copy your agency secret key

You do **not** need to create the key yourself. When your agency is created, a secret key is already assigned. To obtain it:

1. Go to **Agency** → **API** as above.
2. Find **Secret key** on the page.
3. Use the copy control so you can paste it only where it belongs (for example, into your own secure automation tool or a password manager your team uses).

Only people who are allowed to view the agency can open this screen. Rotating the key requires permission to change agency settings.

{% hint style="warning" %}
Treat the secret key like a password. Anyone who has it can perform the actions the connection allows across your agency. Do not paste it into shared chat, email, or tickets.
{% endhint %}

## Rotating the key (Change)

If a key might have been exposed, you offboard a vendor, or you want a fresh secret:

1. On **Agency** → **API**, choose **Change**.
2. Read the confirmation: rotating the key immediately invalidates the previous secret. Anything still using the old value will stop working until you update it.
3. Choose **Save** to confirm. The page shows your new secret key—copy it and update every place that stored the old one.

{% hint style="warning" %}
Plan a moment to update every place that stored the old key. Until you do, anything tied to the old secret will fail.
{% endhint %}

## Related documentation

* [White label overview](/agencies/white-label) — agency setup, domains, and client experience.
* [Project automation reference](/platform/api-reference) — secret-key sign-in and actions scoped to a **single** project (customers, review requests, reviews, locations, and more).


# Projects

## List Projects

> Retrieve customer business projects managed by the authenticated agency.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects":{"get":{"tags":["Projects"],"summary":"List Projects","operationId":"listProjects","description":"Retrieve customer business projects managed by the authenticated agency.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}}}}
```

## Create Project

> Provision a new customer business in the agency reseller space.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects":{"post":{"tags":["Projects"],"summary":"Create Project","operationId":"createProject","description":"Provision a new customer business in the agency reseller space.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"name":{"type":"string","minLength":3,"maxLength":50,"description":"Display name for the customer project. Accepts a string from 3 to 50 characters."}},"required":["name"]}}}}}}}}
```

## Delete Project

> Remove a customer project when a client is offboarded.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}":{"delete":{"tags":["Projects"],"summary":"Delete Project","operationId":"deleteProject","description":"Remove a customer project when a client is offboarded.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."}}}}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```

## Get Project Key

> Retrieve the secret key used to authorize Project API calls for this customer business.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}/key":{"get":{"tags":["Projects"],"summary":"Get Project Key","operationId":"getProjectKey","description":"Retrieve the secret key used to authorize Project API calls for this customer business.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"string","description":"Secret key for the project's Project API. Treat it like a password and store it only in trusted automation."}}}}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```

## Roll Project Key

> Invalidate the current project secret key and issue a new one for Project API access.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}/key":{"delete":{"tags":["Projects"],"summary":"Roll Project Key","operationId":"rollProjectKey","description":"Invalidate the current project secret key and issue a new one for Project API access.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"string","description":"Newly issued secret key for the project's Project API. The previous key stops working immediately."}}}}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```

## Duplicate Project

> Copy an existing project configuration into a new customer business.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}/duplicate":{"post":{"tags":["Projects"],"summary":"Duplicate Project","operationId":"duplicateProject","description":"Copy an existing project configuration into a new customer business.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"name":{"type":"string","minLength":3,"maxLength":50,"description":"Display name for the customer project. Accepts a string from 3 to 50 characters."}},"required":["name"]}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```

## Update Project Overrides

> Adjust feature limits and flags for a specific customer project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}/overrides":{"put":{"tags":["Projects"],"summary":"Update Project Overrides","operationId":"updateProjectOverrides","description":"Adjust feature limits and flags for a specific customer project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"daily_email_requests":{"type":"integer","description":"Daily email request limit override."},"monthly_email_requests":{"type":"integer","description":"Monthly email request limit override."},"daily_sms_requests":{"type":"integer","description":"Daily SMS request limit override."},"monthly_sms_requests":{"type":"integer","description":"Monthly SMS request limit override."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```

## Suspend Project

> Temporarily block a project from operating without deleting its data.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}/suspend":{"put":{"tags":["Projects"],"summary":"Suspend Project","operationId":"suspendProject","description":"Temporarily block a project from operating without deleting its data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```

## Unsuspend Project

> Restore access for a previously suspended customer project.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Projects"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/projects/{project_id}/unsuspend":{"put":{"tags":["Projects"],"summary":"Unsuspend Project","operationId":"unsuspendProject","description":"Restore access for a previously suspended customer project.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}},"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the project."},"description":"Unique numeric identifier for the project."}]}}}}
```


# Clients

## List Clients

> Retrieve client-console users and their scoped project access.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Clients"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/clients":{"get":{"tags":["Clients"],"summary":"List Clients","operationId":"listClients","description":"Retrieve client-console users and their scoped project access.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","nullable":true,"description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}}}}}}}
```

## Invite Client

> Invite a client user and assign project or section access.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Clients"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/clients":{"post":{"tags":["Clients"],"summary":"Invite Client","operationId":"inviteClient","description":"Invite a client user and assign project or section access.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","nullable":true,"description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"email":{"type":"string","format":"email","description":"Email address of the client user to invite."},"project_ids":{"type":"array","description":"Project identifiers the client can access.","items":{"type":"integer","description":"Project identifiers the client can access."}},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions.","enum":["admin","manager","operator","viewer"]},"section_ids":{"type":"array","description":"Product section identifiers the client can access.","items":{"type":"integer","description":"Product section identifiers the client can access."}}},"required":["email","project_ids"]}}}}}}}}
```

## Update Client

> Change a client user's role and accessible projects or sections.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Clients"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/clients/{client_id}":{"put":{"tags":["Clients"],"summary":"Update Client","operationId":"updateClient","description":"Change a client user's role and accessible projects or sections.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","nullable":true,"description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"role_slug":{"type":"string","description":"Role slug that controls the user's permissions.","enum":["admin","manager","operator","viewer"]},"project_ids":{"type":"array","description":"Project identifiers the client can access.","items":{"type":"integer","description":"Project identifiers the client can access."}},"section_ids":{"type":"array","description":"Product section identifiers the client can access.","items":{"type":"integer","description":"Product section identifiers the client can access."}}}}}}},"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the client user."},"description":"Unique numeric identifier for the client user."}]}}}}
```

## Delete Client

> Remove a client user's access to the agency console.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Clients"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/clients/{client_id}":{"delete":{"tags":["Clients"],"summary":"Delete Client","operationId":"deleteClient","description":"Remove a client user's access to the agency console.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."}}}}}}},"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the client user."},"description":"Unique numeric identifier for the client user."}]}}}}
```

## Resend Client Invite

> Send another onboarding invitation to a pending client user.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Clients"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/clients/{client_id}/resend-invite":{"post":{"tags":["Clients"],"summary":"Resend Client Invite","operationId":"resendClientInvite","description":"Send another onboarding invitation to a pending client user.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","nullable":true,"description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}},"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the client user."},"description":"Unique numeric identifier for the client user."}]}}}}
```


# Team Members

## List Team Members

> Retrieve internal agency staff with reseller account access.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Team Members"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/team-members":{"get":{"tags":["Team Members"],"summary":"List Team Members","operationId":"listTeamMembers","description":"Retrieve internal agency staff with reseller account access.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}}}}}}}
```

## Invite Team Member

> Invite an internal teammate to manage the agency account.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Team Members"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/team-members":{"post":{"tags":["Team Members"],"summary":"Invite Team Member","operationId":"inviteTeamMember","description":"Invite an internal teammate to manage the agency account.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","nullable":true,"description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"email":{"type":"string","format":"email","description":"Email address of the agency teammate to invite."}},"required":["email"]}}}}}}}}
```

## Delete Team Member

> Remove an internal teammate from the agency account.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Team Members"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/team-members/{team_member_id}":{"delete":{"tags":["Team Members"],"summary":"Delete Team Member","operationId":"deleteTeamMember","description":"Remove an internal teammate from the agency account.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."}}}}}}},"parameters":[{"name":"team_member_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the agency team member."},"description":"Unique numeric identifier for the agency team member."}]}}}}
```

## Resend Team Member Invite

> Send another onboarding invitation to a pending agency teammate.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Team Members"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/team-members/{team_member_id}/resend-invite":{"post":{"tags":["Team Members"],"summary":"Resend Team Member Invite","operationId":"resendTeamMemberInvite","description":"Send another onboarding invitation to a pending agency teammate.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"role_slug":{"type":"string","description":"Role slug that controls the user's permissions."},"invite_email":{"type":"string","nullable":true,"description":"Invite email for this resource."},"invited_at":{"type":"integer","nullable":true,"description":"Invited at for this resource."},"joined_at":{"type":"integer","description":"Joined at for this resource."},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."},"sections":{"type":"array","description":"List of sections for this resource.","items":{"type":"object","description":"Sections for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}},"projects":{"type":"array","description":"List of projects for this resource.","items":{"type":"object","description":"Projects for this resource.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"name":{"type":"string","description":"Display name for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"is_active":{"type":"boolean","description":"Whether the project is active."},"is_paused":{"type":"boolean","description":"Whether the project is paused."},"is_suspended":{"type":"boolean","description":"Whether the project has been suspended."},"features":{"type":"object","description":"Feature limits and feature flags enabled for the project.","properties":{"asks":{"type":"integer","description":"Maximum or current allowance for review request records."},"customers":{"type":"integer","description":"Maximum or current allowance for customer records."},"locations":{"type":"integer","description":"Maximum or current allowance for location records."},"members":{"type":"integer","description":"Maximum or current allowance for member records."},"links":{"type":"integer","description":"Maximum or current allowance for link records."},"tags":{"type":"integer","description":"Maximum or current allowance for tag records."},"widgets":{"type":"integer","description":"Maximum or current allowance for widget records."},"api":{"type":"boolean","description":"Whether API access is enabled."},"webhooks":{"type":"boolean","description":"Whether webhook access is enabled."},"forms_advanced":{"type":"boolean","description":"Whether advanced forms are enabled."},"ambassador":{"type":"boolean","description":"Whether ambassador features are enabled."}}},"created_at":{"type":"integer","description":"Unix timestamp when this resource was created."},"updated_at":{"type":"integer","description":"Unix timestamp when this resource was last updated."}}}}}}}}}}}},"parameters":[{"name":"team_member_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the agency team member."},"description":"Unique numeric identifier for the agency team member."}]}}}}
```


# Sections

## List Sections

> Retrieve product sections available for client access scoping.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"Sections"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/sections":{"get":{"tags":["Sections"],"summary":"List Sections","operationId":"listSections","description":"Retrieve product sections available for client access scoping.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"slug":{"type":"string","description":"URL-friendly identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."}}}}}}}}}}}}}}
```


# External Links

## List External Links

> Retrieve shared sidebar links shown in the white-label console.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"External Links"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/external-links":{"get":{"tags":["External Links"],"summary":"List External Links","operationId":"listExternalLinks","description":"Retrieve shared sidebar links shown in the white-label console.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"array","description":"Response payload for the request.","items":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"label":{"type":"string","description":"Label for this resource."},"url":{"type":"string","description":"URL for the external resource."}}}}}}}}}}}}}}
```

## Create External Link

> Add a shared navigation link for client console users.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"External Links"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/external-links":{"post":{"tags":["External Links"],"summary":"Create External Link","operationId":"createExternalLink","description":"Add a shared navigation link for client console users.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"label":{"type":"string","description":"Label for this resource."},"url":{"type":"string","description":"URL for the external resource."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"label":{"type":"string","maxLength":30,"description":"Sidebar label shown to client-console users. Accepts a string of at most 30 characters."},"url":{"type":"string","format":"uri","maxLength":500,"description":"Absolute http or https URL opened from the client-console sidebar. Accepts at most 500 characters."}},"required":["label","url"]}}}}}}}}
```

## Update External Link

> Change the label or URL for a shared navigation link.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"External Links"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/external-links/{link_id}":{"put":{"tags":["External Links"],"summary":"Update External Link","operationId":"updateExternalLink","description":"Change the label or URL for a shared navigation link.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."},"data":{"type":"object","description":"Response payload for the request.","properties":{"id":{"type":"integer","description":"Unique numeric identifier for this resource."},"uuid":{"type":"string","description":"Stable UUID for this resource."},"label":{"type":"string","description":"Label for this resource."},"url":{"type":"string","description":"URL for the external resource."}}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"label":{"type":"string","maxLength":30,"description":"Sidebar label shown to client-console users. Accepts a string of at most 30 characters."},"url":{"type":"string","format":"uri","maxLength":500,"description":"Absolute http or https URL opened from the client-console sidebar. Accepts at most 500 characters."}},"required":["label","url"]}}}},"parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the external link."},"description":"Unique numeric identifier for the external link."}]}}}}
```

## Delete External Link

> Remove a shared navigation link from the client console.

```json
{"openapi":"3.0.3","info":{"title":"MGR Agency API","version":"1.0.0"},"tags":[{"name":"External Links"}],"servers":[{"url":"https://api.moregoodreviews.com/agency"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ApiKey"}}},"paths":{"/external-links/{link_id}":{"delete":{"tags":["External Links"],"summary":"Delete External Link","operationId":"deleteExternalLink","description":"Remove a shared navigation link from the client console.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Object containing response data for this resource.","properties":{"success":{"type":"boolean","description":"Indicates whether the request completed successfully."},"code":{"type":"integer","description":"Short code or application-level status code for this resource."}}}}}}},"parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","nullable":false,"description":"Unique numeric identifier for the external link."},"description":"Unique numeric identifier for the external link."}]}}}}
```


# MCP Server

Connect assistants to your white-label agency for projects, clients, team members, and portal links.

The **agency MCP Server** connects assistants such as **Claude** to your **white-label agency layer**, the same operations you use to run the reseller side of the product. Through plain-language chat, an authorized assistant can help you manage **customer businesses (projects)**, **clients** who sign in to your branded portal, **agency team members**, **which parts of the console each person may see**, and **extra sidebar links** shown to every client.

This is **not** the same surface as a [single-project MCP connection](/platform/mcp-server). Project MCP is where assistants work **inside one business** (customers, review requests, **reviews**, **ratings**, **feedback**, **messages**, **locations**, and related day-to-day reputation work). Agency MCP stays **above** that. It provisions and governs businesses and people, but it does **not** expose per-project review feeds or customer lists.

MCP (**Model Context Protocol**) is the shared standard both connections use. Only the **scope** changes (whole agency versus one project).

{% hint style="info" %}
You need **API access** enabled on your agency account to use this screen. If you see an upgrade prompt, enable API access first, then return to **Agency → MCP Server**.
{% endhint %}

{% hint style="warning" %}
Need to pull **reviews**, **ratings**, or **feedback** for a specific client? Connect the assistant with **project MCP** on that project (or switch connectors), not the agency URL alone. See [**Project MCP Server**](/platform/mcp-server).
{% endhint %}

For a complete list of tools the assistant can call, see [**Tools**](/agencies/mcp-server/tools).

***

## Open the agency MCP Server page

1. Sign in to your console.
2. Open the **Agency** area from the header (available when you run a white-label agency plan).
3. In the sidebar, choose **MCP Server**.

You will see a short explanation, a field labeled **MCP Server URL** with your agency's address ready to copy, and a link to documentation. Always copy that full value. Agency MCP uses the platform API host (not your optional **White Label API** domain from [domain setup](/agencies/domain-setup)), so the connection stays reliable when assistants register and sign in.

Below that, **Connected apps** lists assistants or other tools that have already signed in through this connection. Each tile shows **when** they connected and **what level of access** they were granted. You can **Revoke** any connection you no longer trust.

***

## Connect an assistant

Exact menus change over time, but the pattern matches other MCP integrations.

1. Open your assistant's settings and find **Connectors** or **Integrations**.
2. Choose **Add custom connector** (or the equivalent).
3. Paste the **MCP Server URL** you copied from **Agency → MCP Server**. Use the full address from the copy box exactly as shown.
4. Save the connector. The assistant opens a **sign-in** window for your platform account.
5. Complete sign-in, then on the **Authorize** screen choose **your agency** (when you use the copied URL, that choice is usually fixed to the right agency), review the permission levels, and approve.

After authorization, the assistant appears under **Connected apps** on the agency MCP Server page. You can start asking it to help with reseller-level tasks in chat.

{% hint style="success" %}
Reuse the same documentation habits as a [project MCP connection](/platform/mcp-server). For example, mention your product name in the first message so the assistant picks the right connector when you use several.
{% endhint %}

{% hint style="warning" %}
An authorized assistant can change **which businesses exist**, **who may access them**, and **sending limits or caps**. It can also **reveal or replace** a client business's Project API secret key. Only connect tools you trust, and review confirmations before approving actions that delete a **project**, roll a **secret key**, remove a **client** or **team member**, or otherwise unwind onboarding.
{% endhint %}

***

## What this connection is built for

The agency MCP layer mirrors what the agency console is responsible for at the **reseller** level.

### Customer businesses (projects)

Assistants can help with the lifecycle of each client business under your agency: **listing** them, **creating** new ones, **temporarily suspending** or **restoring** access, **copying** an existing setup into a new business when you need a template, **adjusting plan-style overrides** (such as caps on customers, locations, seats, links, tags, widgets, optional modules like advanced forms or ambassador tools), **tuning email and SMS request limits** so sending stays within what you allow for each client, **retrieving or rotating** a business's Project API secret key when you need to connect that client's own automation, and **removing** a business when someone is fully offboarded.

### Clients (portal users)

Assistants can **list** people invited as clients, **send invitations** with an appropriate role, **choose which businesses** they may open, **limit which console areas** they see, **resend** a stalled invitation, **update** access after roles or assignments change, and **remove** a client seat.

### Agency team members

Assistants can **list** internal teammates on the agency, **invite** new staff, **resend** invites, and **remove** someone who should no longer have agency-wide access.

### Console sections catalog

Assistants can **look up the catalog of console areas** (stable labels such as reviews, messaging, and similar product surfaces). That list is what you use, often together with client invites, to decide **which slices of the product** a client role is allowed to see.

### External links (client portal sidebar)

Assistants can **list**, **add**, **rename or retarget**, and **remove** the extra shortcuts that appear in your branded client portal sidebar for everyone. For example "Book online" or your marketing site, next to the core product navigation.

***

## Example prompts (agency scope)

These illustrate realistic reseller chores, not reputation analytics inside a single storefront:

* **Projects** — "List every customer business under our agency and note which are suspended." / "Create a project named *Bright Smile Midtown*." / "Duplicate *Demo Bakery* into a new project called *Harbor Cafe*." / "Raise the monthly email request limit on project 42 to match our enterprise tier." / "Copy the Project API secret key for *Bright Smile Midtown* into our password manager." / "Roll the Project API secret key for project 42. We offboarded a vendor."
* **Clients** — "Invite *<alex@clientco.example>* as a viewer on projects 3 and 7 with only the sections we use for reporting." / "Resend the pending invite for client membership ID 18."
* **Team** — "Who has agency team seats right now?" / "Invite *<ops@myagency.example>* to the agency team."
* **Sections** — "What console sections exist so I can narrow what our next client invite sees?"
* **Portal links** — "Add a sidebar link *Schedule consult* pointing to our Calendly URL." / "Remove external link ID 5."

When you need **reviews**, **ratings**, **feedback**, or **customer-level** work, switch context to [**project MCP**](/platform/mcp-server) for the relevant business.

***

## Permissions at a glance

When you authorize, you typically grant three bands of capability. Your assistant only receives actions that match what you approved:

| Scope      | What it allows                                                                                                                |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **Read**   | Inspect projects, clients, team members, the sections catalog, and external links, and retrieve a project's secret key        |
| **Write**  | Create or update projects (including limits and overrides), send or adjust invitations and access, and maintain sidebar links |
| **Delete** | Remove projects, client seats, team members, or external links when workflows allow it, and roll a project's secret key       |

These permissions apply to the **agency you authorized**, not to unrelated spaces or personal accounts.

***

## Disconnect or revoke access

**In the assistant.** Remove or disable the custom connector in that product's settings. Access stops immediately.

**In your agency console.** On **Agency → MCP Server**, under **Connected apps**, choose **Revoke** for a specific tile to invalidate that connection while leaving others intact.

Disconnecting does **not** by itself delete your businesses or portal accounts. It only removes the assistant's ability to act through this agency connection going forward.

If something does not work as expected, see [**Troubleshooting**](/agencies/mcp-server/troubleshooting).


# Tools

Every agency MCP tool for projects, clients, team members, sections, and portal sidebar links.

The **agency MCP Server** exposes tools an assistant can call on your behalf at the **reseller** level. Each tool applies to your white-label agency, not to review or customer data inside a single client business. The assistant sees only tools that match the **Read**, **Write**, and **Delete** scopes you approved during sign-in.

List-style tools return **paginated** results. When a list is long, the assistant may need to request additional pages.

{% hint style="warning" %}
Agency tools do **not** include customer lists, review feeds, or message history for individual client businesses. For that work, connect [**project MCP**](/platform/mcp-server) on the relevant project.
{% endhint %}

***

## Customer businesses (projects)

| Tool                     | Permission | What it does                                                                                                                           |
| ------------------------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| List Projects            | Read       | View all customer businesses under your agency                                                                                         |
| Create Project           | Write      | Provision a new client business                                                                                                        |
| Duplicate Project        | Write      | Copy an existing project's configuration into a new business                                                                           |
| Update Project Overrides | Write      | Adjust feature limits and flags for one business (customers, locations, seats, links, tags, widgets, email/SMS caps, optional modules) |
| Suspend Project          | Write      | Temporarily disable access for a client business                                                                                       |
| Unsuspend Project        | Write      | Restore access for a suspended business                                                                                                |
| Get Project Key          | Read       | Retrieve the secret key a client business uses for Project API access                                                                  |
| Roll Project Key         | Delete     | Invalidate that secret key and issue a new one                                                                                         |
| Delete Project           | Delete     | Remove a client business when fully offboarded                                                                                         |

{% hint style="danger" %}
**Delete Project** removes the business and its data from your agency. Confirm carefully before approving.
{% endhint %}

{% hint style="warning" %}
**Get Project Key** returns a secret. Treat it like a password. Do not paste it into shared chat, email, or tickets. **Roll Project Key** immediately invalidates the previous secret. Anything still using the old value will stop working until you update it. Rolling requires **Delete** permission.
{% endhint %}

**Update Project Overrides** can adjust limits such as:

* Maximum customers, locations, members, links, tags, or widgets
* Daily and monthly email and SMS request caps
* Optional modules (advanced forms, API access, webhooks, ambassador tools)

***

## Clients (portal users)

| Tool                 | Permission | What it does                                                                          |
| -------------------- | ---------- | ------------------------------------------------------------------------------------- |
| List Clients         | Read       | View people invited to your branded client portal                                     |
| Invite Client        | Write      | Send a portal invitation with role, project access, and optional section restrictions |
| Update Client        | Write      | Change a client's role, project assignments, or section access                        |
| Resend Client Invite | Write      | Resend a pending invitation                                                           |
| Delete Client        | Delete     | Remove a client seat                                                                  |

When inviting or updating clients, the assistant can limit which **console sections** a person sees. Use **List Sections** first to discover available section identifiers.

***

## Agency team members

| Tool                      | Permission | What it does                                   |
| ------------------------- | ---------- | ---------------------------------------------- |
| List Team Members         | Read       | View internal agency staff with console access |
| Invite Team Member        | Write      | Send an agency team invitation                 |
| Resend Team Member Invite | Write      | Resend a pending team invitation               |
| Delete Team Member        | Delete     | Remove someone from the agency team            |

***

## Console sections

| Tool          | Permission | What it does                                                                     |
| ------------- | ---------- | -------------------------------------------------------------------------------- |
| List Sections | Read       | Retrieve the catalog of console areas (reviews, messaging, and similar surfaces) |

Use this catalog when shaping **Invite Client** or **Update Client** calls so portal users only see the areas you intend.

***

## External links (client portal sidebar)

| Tool                 | Permission | What it does                                             |
| -------------------- | ---------- | -------------------------------------------------------- |
| List External Links  | Read       | View extra sidebar shortcuts shown to all portal clients |
| Create External Link | Write      | Add a new sidebar link (label and destination URL)       |
| Update External Link | Write      | Rename or change the destination of an existing link     |
| Delete External Link | Delete     | Remove a sidebar link                                    |

These links appear in your branded client portal for every client, alongside core product navigation.

***

## Tool behavior notes

**Pagination.** List tools accept page and limit parameters. Agencies with many client businesses or portal users may need paginated requests.

**Project identifiers.** Tools that act on one business require a **project ID** (numeric). Ask the assistant to list projects first if you refer to businesses by name.

**Section restrictions.** Section slugs come from **List Sections**. They mirror the visibility options you see when inviting clients in the agency console.

**Suspension versus deletion.** **Suspend Project** pauses access without removing data. **Delete Project** is permanent offboarding.

**Project secret keys.** **Get Project Key** returns the secret used for that business's Project API. **Roll Project Key** issues a new secret and immediately invalidates the old one. Rolling requires **Delete** permission.

For setup steps and example chat prompts, see [**MCP Server**](/agencies/mcp-server).


# Troubleshooting

Fix agency MCP connection, authorization, missing tools, and scope issues.

This guide covers common issues when connecting an MCP assistant to your **agency** in More Good Reviews. Most problems come down to the **URL you paste**, **permissions you approve**, or **API access** not being enabled on your plan.

{% hint style="info" %}
For project-level MCP issues (customers, reviews, messages inside one business), see [**Project MCP Troubleshooting**](/platform/mcp-server/troubleshooting).
{% endhint %}

***

## The assistant cannot connect at all

### Use the full MCP Server URL

Copy **MCP Server URL** from **Agency → MCP Server**. Paste the **entire** string into your assistant's connector setup.

{% hint style="warning" %}
Do **not** paste a generic API host or invent a path. The agency URL includes a scoped segment and looks similar to `https://api.example.com/mcp/a/…`.
{% endhint %}

### Do not substitute a custom API domain

Agency **MCP Server URL** uses the platform API host, even if you set a **White Label API** domain under [domain setup](/agencies/domain-setup). Always paste the value from **Agency → MCP Server**, not a host you invent from your branded API domain.

{% hint style="info" %}
If an older connector used your custom API domain and sign-in or registration fails, remove it and add a new connector with the current **MCP Server URL** from the console.
{% endhint %}

### Re-add the connector after URL changes

If the **MCP Server URL** in your console changed, remove the old connector and add a new one with the current URL, then authorize again.

***

## Sign-in or authorization fails

### Complete the flow in one session

When you save a new connector, the assistant opens a **sign-in** window. Finish sign-in and click **Authorize** before the window closes. If you see a message that the authorization request is missing or expired, start again from **Add custom connector**.

### Choose the correct account

Sign in with the MGR account that owns the agency. Client portal users may not have permission to authorize MCP connections.

### Agency MCP requires API access

On **Agency → MCP Server**, if the page is locked behind an upgrade prompt, enable **API access** on your agency plan first, then return to MCP setup.

### Grant enough scope

If you only approved **Read**, the assistant cannot invite clients, create projects, or delete records. Remove the connector, reconnect, and approve **Write** or **Delete** when you need those actions.

| Symptom                                           | Likely cause             | Fix                                                                 |
| ------------------------------------------------- | ------------------------ | ------------------------------------------------------------------- |
| Assistant says it cannot create or update records | Read-only authorization  | Reconnect and approve **Write**                                     |
| Assistant cannot delete records                   | Delete scope not granted | Reconnect and approve **Delete**                                    |
| Assistant cannot roll a project secret key        | Delete scope not granted | Reconnect and approve **Delete**. Rolling a key is a delete action. |
| Fewer tools than expected                         | Partial scopes           | Reconnect and review all three scope checkboxes                     |

***

## Connected but the wrong data appears

### Agency versus project server

Agency MCP manages **businesses, portal clients, and team members** at the reseller level. It does **not** return review feeds or customer lists for a client storefront. For that work, connect [**Project MCP Server**](/platform/mcp-server) on the relevant project.

### Name the connector in chat

When you run several MCP connectors, start your message with your product or agency name so the assistant selects the right one.

***

## Results look incomplete or truncated

### Large lists are paginated

Project lists, client directories, and team rosters may span many pages. Ask the assistant to request the next page or narrow the query.

***

## Connected apps do not show the assistant

After authorization, the assistant should appear under **Connected apps** on **Agency → MCP Server**.

1. Confirm authorization finished with a success message.
2. Refresh the settings page.
3. If it still does not appear, revoke any stale entry, remove the connector in the assistant, and connect again.

Each tile shows **scopes** (read, write, delete) and **when** the connection was approved. Use **Revoke** on a tile to cut off one assistant without affecting others.

***

## Actions fail or return errors

### Duplicate or suspended projects

**Duplicate Project** needs a source project ID and a new name. **Suspend Project** blocks client access until you **Unsuspend Project**.

### Client invites and sections

When inviting clients with section restrictions, ask the assistant to call **List Sections** first so it uses valid section identifiers from your agency catalog.

***

## Disconnect and start fresh

**In the assistant.** Remove or disable the custom MCP connector.

**In MGR.** On **Agency → MCP Server**, click **Revoke** on the relevant **Connected apps** tile.

Disconnecting does **not** delete your businesses or portal accounts. It only removes the assistant's access. Reconnect anytime with the same URL and a new authorization.

***

## Still stuck?

1. Verify you copied the latest **MCP Server URL** from **Agency → MCP Server**.
2. Confirm **API access** is enabled on your agency plan.
3. Re-authorize with the scopes you need.
4. Try a simple read-only prompt first ("List agency projects") before write or delete tasks.

For tool names and permissions, see [**Tools**](/agencies/mcp-server/tools). For setup walkthroughs, see [**MCP Server**](/agencies/mcp-server).


