Dashboard

Developer API

Programmatically send review invites via our REST API. Perfect for CRM integrations and automation workflows.

⚡ The Developer API is available on paid plans (Starter, Franchise, Agency).

How It Works

  • One API key per account (not per page)
  • Specify pageSlug in each request to target a specific review page
  • Works with all your review pages (1 or 50+)
  • Each page uses its own email/SMS credentials (Resend/Twilio)

Getting Started

  1. Go to Dashboard → Integrations → Developer API
  2. Click "Generate API Key"
  3. Copy and save your API key securely (you won't see it again)
  4. Find your pageSlug in the URL of your review page:https://your-domain.com/acme-plumbing ← This is your pageSlug

Send Invite Endpoint

POST /api/v1/invite

Headers

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Request Body

{
  "pageSlug": "acme-plumbing",           // Required: Your review page slug
  "channel": "email",                    // Required: "email" or "sms"
  "contacts": [                          // Required: Array of contacts
    { 
      "name": "John Doe",                // Required
      "email": "john@example.com"        // Required for email channel
      // "phone": "+1234567890"           // Required for sms channel
    }
  ],
  "template": "Hi {name}, review us: {link}"  // Optional: Custom message
}
Template variables: Use {name} for customer name and {link} for review page URL

Response

{
  "success": true,
  "sent": 1,
  "failed": 0,
  "errors": []
}

Code Examples

cURL

curl -X POST https://your-domain.com/api/v1/invite \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "pageSlug": "acme-plumbing",
    "channel": "email",
    "contacts": [{"name": "John", "email": "john@example.com"}],
    "template": "Hi {name}, review us: {link}"
  }'

JavaScript

const response = await fetch('/api/v1/invite', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk_live_xxx',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    pageSlug: 'acme-plumbing',
    channel: 'email',
    contacts: [{ name: 'John', email: 'john@example.com' }],
    template: 'Hi {name}, review us: {link}'
  })
});

const data = await response.json();

Python

import requests

response = requests.post(
    'https://your-domain.com/api/v1/invite',
    headers={
        'Authorization': 'Bearer sk_live_xxx',
        'Content-Type': 'application/json'
    },
    json={
        'pageSlug': 'acme-plumbing',
        'channel': 'email',
        'contacts': [{'name': 'John', 'email': 'john@example.com'}],
        'template': 'Hi {name}, review us: {link}'
    }
)

data = response.json()

Important Notes

  • Authentication: Include API key in Authorization header
  • Limits: Maximum 100 contacts per request
  • Plans: Available on Starter, Franchise, and Agency plans
  • Credentials: Uses the page's configured Resend/Twilio keys
  • Security: Keep your API key secret - treat it like a password