Skip to main content
All Integrations
Developer Tools

REST API & Webhooks

Build custom integrations with the EmbedMyReviews API. Send contacts, trigger campaigns, and receive real-time webhook events. Full programmatic control for operators building custom solutions.

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/request-reviews/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": "[email protected]",
    "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

Retrieve reviews across all connected sources. Filter by rating, organization, location, or source.

Organizations API

Create, update, list, and delete organizations programmatically.

Send Invites API

Send review request invites via email, SMS, or WhatsApp through campaign endpoints.

Campaigns & Sources API

List campaigns, review sources, countries, and verify your API token.

Real-Time Webhooks

Receive instant notifications when events occur in EmbedMyReviews. Build reactive systems that respond to new reviews, campaign completions, and more.

review-created

Triggered when a new review is received from any connected source.

review-updated

Fired when an existing review is modified, such as a reply added or rating changed.

organization-created

Triggered when a new organization is created in the platform.

location-created

Triggered when a new location is added to an organization.

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.

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: '[email protected]',
      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': '[email protected]',
        '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' => '[email protected]',
        '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: '[email protected]',
  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.

API Requests60/min
Window Reset60 seconds
Rate Limit Status429
Webhook Retries10 retries / 5 min

Need higher limits? Contact us—we accommodate high-volume agencies.

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—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.