Review Invites
Create and manage review invite campaigns, templates, and recipients.
create_review_campaign
Create a new review-invite (acquisition) campaign — an email/SMS flow that asks customers to leave a review, screens them by rating, and routes happy customers to a public review site. Created as a draft; use run_campaign_action with op "publish" to launch it once configured. locationId is required; everything else can be filled in now or with update_review_campaign later. Returns the created campaign. You don't pass an agency — it comes from your credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_review_campaign",
"arguments": {
"locationId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
update_review_campaign
Edit an existing review-invite campaign's configuration. Pass only the fields you want to change. Identify the campaign by its id (from list_review_campaigns or create_review_campaign). To change the campaign's lifecycle status (publish/stop/clone/archive) use run_campaign_action instead of setting `status` directly here. Returns the updated campaign, or throws if not found.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_review_campaign",
"arguments": {
"campaignId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
run_campaign_action
Run a lifecycle action on a review-invite campaign. Actions: "publish" launches the campaign — if autoSend is on this starts sending real emails/SMS to recipients immediately, and it is gated per channel: a campaign whose channels include EMAIL requires a verified sending domain for the client, and one whose channels include SMS requires a carrier-verified number for the location (either failure returns an explanatory error); "stop" halts an active campaign; "clone" duplicates it as a new draft (returns the clone); "autoSend" turns automatic sending on/off for new recipients (pass `on`); "archive" archives it (only allowed once stopped — a still-active campaign is silently skipped, check the response); "unarchive" restores an archived campaign. Identify the campaign by its id.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run_campaign_action",
"arguments": {
"campaignId": "string",
"op": "publish"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
add_campaign_recipients
Add recipients to a review-invite campaign. Each recipient needs at least an email or phone. If the campaign is already launched with autoSend on (and sends both email and SMS), adding recipients here immediately triggers a real send to the new rows — not just a data insert. Returns the number of recipients added. Identify the campaign by its id (from list_review_campaigns or create_review_campaign).
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "add_campaign_recipients",
"arguments": {
"campaignId": "string",
"recipients": [
{}
]
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
list_invite_templates
List the agency's saved review-invite message templates (reusable email/SMS content for campaigns). Use this to find a template's id before update_invite_template or delete_invite_template.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_invite_templates",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
create_invite_template
Create a reusable review-invite message template. `content` is the rich-text JSON shape the campaign builder's editor produces (pass the same shape as an existing template's `content` if adapting one). Optionally assign it to specific locations so it shows as a suggested template there. Returns the created template.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_invite_template",
"arguments": {
"name": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
update_invite_template
Edit an existing review-invite template. Pass only the fields you want to change. Identify the template by its id (from list_invite_templates). Returns the updated template, or throws if not found.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_invite_template",
"arguments": {
"templateId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
delete_invite_template
Permanently delete a review-invite template. This does not affect campaigns already using its content — it only removes the reusable template. Identify the template by its id (from list_invite_templates).
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_invite_template",
"arguments": {
"templateId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
find_campaign_recipients
Search the agency's review-invite recipients by name, email or phone, across every campaign, location and source (manual, CSV, CRM). Use this when you know who someone is but not which campaign or location they're in — unlike list_campaign_recipients, this needs no clientId or locationId. Returns matching contacts with their id, campaign, location, source, contact type, and whether they've already been messaged. The id is what update_campaign_recipient and move_campaign_recipients take.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find_campaign_recipients",
"arguments": {
"query": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
update_campaign_recipient
Correct a review-invite recipient's details — name, email, phone or contact type. Pass only the fields you're changing. Identify the recipient by id (from find_campaign_recipients or list_campaign_recipients). Editing email or phone on a contact who has ALREADY been messaged is refused: the delivered message and any reply are tied to the address it went to, so changing it would misattribute them. Returns the updated contact.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "update_campaign_recipient",
"arguments": {
"recipientId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
move_campaign_recipients
Move review-invite recipients to a campaign at a different location — the fix when an import filed contacts under the wrong branch. A recipient's location IS its campaign's location, so this takes a target campaignId; use list_review_campaigns to find campaigns at the location you want. Contacts that have already been messaged cannot be moved (the delivered message belongs to the location it was sent from), and moving pending contacts into a live auto-sending campaign is refused unless you pass allowSend:true, because it would message them immediately. Returns how many moved.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "move_campaign_recipients",
"arguments": {
"recipientIds": [
"string"
],
"campaignId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.