Skip to main content
All Integrations
Developer Tools

REST API, Webhooks & MCP

Build custom integrations with the EmbedMyReviews API. Send contacts, trigger campaigns, pull Google Business Profile performance data, run Local Search Grid scans, and receive real-time webhook events. Plus a Model Context Protocol server for Claude Desktop, Cursor, and ChatGPT so AI clients can read the same data without a single line of integration code.

API documentation is fully white-labelled and hosted on your custom domain at app.yourdomain.com/docs/api. Your clients and developers never see EmbedMyReviews.

POST /api/v1/.../campaigns/{id}/invite
curl -X POST https://app.your-white-label.com/api/v1/request-reviews/campaigns/a1b2c3d4/invite \
  -H "Authorization: Bearer your-api-token" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "sarah@example.com",
    "first_name": "Sarah",
    "last_name": "Johnson",
    "send_after_hours": 0
  }'

Full API Access Included

Every EmbedMyReviews plan includes complete API access. No enterprise tier required, no per-request fees.

Reviews API

List, get, create, update, and delete reviews across all connected sources. Filter by rating, organisation, location, or source.

Organisations API

Create, update, list, and delete organisations programmatically.

Send Invites API

Send review request invites via email, SMS, or WhatsApp through campaign endpoints. Wire it straight into your CRM, POS, or booking system.

GBP Performance API

Pull Google Business Profile impressions, calls, direction requests, and website clicks for any location, plus the search query terms shoppers typed to find it. Includes the previous period totals for instant trend deltas.

Local Search Grid API

Agency

Agency-only. Trigger new scans, re-run existing ones, schedule recurring runs at business hours, browse snapshot history, and pull the same deep insights the dashboard renders. Customers can never see these endpoints.

AI Hub (MCP)

New

Same data, exposed as Model Context Protocol tools. Connect Claude Desktop, Cursor, or ChatGPT in under a minute. The AI runs the right query for the question.

Real-Time Webhooks

Receive instant notifications when events occur in EmbedMyReviews. Build reactive systems that respond to new reviews, finished Local Search Grid scans, organisation changes, and more.

review-created & review-updated

Fired when a new review lands or an existing one is modified (reply added, rating changed).

organization-* & location-*

Created, updated, and deleted events for organisations and locations. Useful for syncing your CRM or billing system.

scan-completed

Agency

Fires once a Local Search Grid snapshot finishes. Payload includes the summary stats and the report URL, so you can post a Slack/Teams update or kick off a Looker refresh without polling.

scan-failed

Agency

Fires when a scan run errors out. The short error_message is safe to surface to your team or to alert on, so you catch DataForSEO credential issues before clients notice.

Webhook Payload
{
  "webhook_event": "review-created",
  "id": 142,
  "organization_id": 1,
  "location_id": 3,
  "source_name": "google",
  "author": "Sarah Johnson",
  "rating": 5,
  "message": "Outstanding service!",
  "replied": false,
  "published_on": "2026-01-15T10:30:00+00:00"
}

What Agencies Build with the API

Custom integrations that go beyond out-of-the-box connectors. Build exactly what your clients need.

Cron-driven LSG scans

Agency

Trigger a Local Search Grid scan every month during business hours when rankings actually matter. Subscribe to scan-completed to push the snapshot into your reporting stack. No clicking through the dashboard for each client.

GBP performance in Looker / Sheets

Pull impressions, calls, direction requests, and search query terms into your existing reporting tool. The endpoint returns the previous period totals too, so trend deltas show up in one query.

Claude / Cursor / ChatGPT direct access

Skip the REST API entirely for ad-hoc questions. Wire Claude Desktop, Cursor, or ChatGPT to the MCP endpoint and ask "which client had the biggest drop in 5-star reviews this month?" The AI runs the right query for you.

Custom Dashboards

Pull review data into your own reporting dashboards. Build unified views across multiple clients and data sources.

CRM Sync

Two-way sync between your CRM and EmbedMyReviews. Keep customer records updated with review status and history.

Slack/Teams Alerts

Post new reviews to Slack or Teams channels. Get instant team notifications for negative reviews requiring attention.

Custom Reports

Generate branded PDF reports for clients with review trends, response rates, and competitive benchmarks.

Billing Integration

Track client usage and automatically update billing systems. Bill clients based on reviews collected or messages sent.

White-Label Portals

Build fully custom client portals using the API. Complete design freedom while leveraging EMR's backend.

Code Examples

Get started quickly with examples in popular languages.

JavaScript / Node.jsnode-fetch
const response = await fetch(
  'https://app.your-white-label.com/api/v1/request-reviews/campaigns/a1b2c3d4/invite',
  {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer your-api-token',
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      email: 'sarah@example.com',
      first_name: 'Sarah',
      last_name: 'Johnson',
      send_after_hours: 0,
    }),
  }
);

const result = await response.json();
Pythonrequests
import requests

response = requests.post(
    'https://app.your-white-label.com/api/v1/request-reviews/campaigns/a1b2c3d4/invite',
    headers={
        'Authorization': 'Bearer your-api-token',
        'Accept': 'application/json',
        'Content-Type': 'application/json',
    },
    json={
        'email': 'sarah@example.com',
        'first_name': 'Sarah',
        'last_name': 'Johnson',
        'send_after_hours': 0,
    }
)

result = response.json()
PHPcURL
$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => 'https://app.your-white-label.com/api/v1/request-reviews/campaigns/a1b2c3d4/invite',
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiToken,
        'Accept: application/json',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'email' => 'sarah@example.com',
        'first_name' => 'Sarah',
        'last_name' => 'Johnson',
        'send_after_hours' => 0,
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);

$response = curl_exec($ch);
Rubynet/http
require 'net/http'
require 'json'

uri = URI('https://app.your-white-label.com/api/v1/request-reviews/campaigns/a1b2c3d4/invite')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer your-api-token'
request['Accept'] = 'application/json'
request['Content-Type'] = 'application/json'
request.body = {
  email: 'sarah@example.com',
  first_name: 'Sarah',
  last_name: 'Johnson',
  send_after_hours: 0
}.to_json

response = http.request(request)

Rate Limits

Generous limits designed for real agency workflows. Most agencies never hit them.

REST API Requests60/min
MCP Calls per Token120/min
MCP Calls per Workspace600/min
Rate Limit Status429 + Retry-After
Webhook Retries10 retries / 5 min

Need higher limits? Get in touch and we'll work with you on high-volume access.

Security

Enterprise-grade security for API access and webhook delivery.

Bearer Token Authentication

API tokens scoped to specific permissions. Revoke compromised tokens from account settings.

Webhook Retries

Up to 10 retries over 5 minutes with exponential backoff. 30-second timeout per attempt.

TLS Encryption

All API traffic encrypted with TLS 1.3. We don't accept unencrypted requests.

Token Permissions

Scope tokens to specific permissions: reviews:read, organizations:create, request:create, and more.

BYOK

Your providers. Wholesale rates.

The API creates contacts and triggers campaigns. Messages are sent via your own Twilio (SMS) or SMTP (email) accounts. You pay wholesale rates directly to your providers, with no EMR markup on messaging costs.

Your Twilio Account
Your SMTP Provider
Your OpenAI Key

Build custom integrations today.

Full API access included with every plan. No enterprise tier required, no per-request fees. Start building in minutes.

No credit card required. Explore the platform for 14 days.