Skip to main content
Coming Soon

VerifyLocal API

Build integrations with our reviews and reputation management platform. Access your reviews, customers, campaigns, and more via a clean REST API.

REST API
JSON responses
Bearer token auth
Webhook events

Authentication

All API requests must include your API key as a Bearer token in the Authorization header. API keys are managed in Settings → Integrations.

Keep your API keys secure. Never expose them in client-side code or public repositories. Rotate keys immediately in Settings if they are compromised.

Example request header

Authorization: Bearer vl_api_xxxxx

Complete example

curl -X GET "https://app.verifylocal.com/api/v1/reviews" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json"

API key format

Prefix

vl_api_

Example

vl_api_a1b2c3d4e5f6g7h8

Endpoints

Base URL: https://app.verifylocal.com. All endpoints return JSON and require authentication.

GETPOSTPUTPATCHDELETE— Method color coding

Reviews

GET/api/v1/reviews

List all reviews. Supports pagination and filtering by rating, date range, and platform.

Request

curl -X GET "https://app.verifylocal.com/api/v1/reviews?page=1&limit=20&rating=5&platform=google" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "data": [
    {
      "id": "rev_01jk3x2m9f",
      "platform": "google",
      "author": "Jane Smith",
      "rating": 5,
      "text": "Excellent service, highly recommend!",
      "date": "2024-11-15T14:32:00Z",
      "responded": true
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 143,
    "pages": 8
  }
}
GET/api/v1/reviews/:id

Retrieve a single review by its ID.

Request

curl -X GET "https://app.verifylocal.com/api/v1/reviews/rev_01jk3x2m9f" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "id": "rev_01jk3x2m9f",
  "platform": "google",
  "author": "Jane Smith",
  "rating": 5,
  "text": "Excellent service, highly recommend!",
  "date": "2024-11-15T14:32:00Z",
  "responded": true,
  "response": {
    "id": "res_02lm4y3n0g",
    "text": "Thank you Jane! We're so glad...",
    "generatedAt": "2024-11-15T15:10:00Z"
  }
}
GET/api/v1/reviews/stats

Get aggregate review statistics including average rating, total count, and rating distribution.

Request

curl -X GET "https://app.verifylocal.com/api/v1/reviews/stats" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "averageRating": 4.7,
  "totalCount": 143,
  "distribution": {
    "5": 98,
    "4": 28,
    "3": 10,
    "2": 4,
    "1": 3
  },
  "platforms": {
    "google": 95,
    "yelp": 31,
    "facebook": 17
  }
}

Customers

GET/api/v1/customers

List all customers with optional search and pagination.

Request

curl -X GET "https://app.verifylocal.com/api/v1/customers?page=1&limit=50" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "data": [
    {
      "id": "cus_03no5z4p1h",
      "name": "John Doe",
      "email": "john@example.com",
      "phone": "+15551234567",
      "createdAt": "2024-10-01T09:00:00Z"
    }
  ],
  "pagination": { "page": 1, "limit": 50, "total": 512, "pages": 11 }
}
POST/api/v1/customers

Create a new customer record.

Request

curl -X POST "https://app.verifylocal.com/api/v1/customers" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"name": "John Doe", "email": "john@example.com", "phone": "+15551234567"}'

Response

{
  "id": "cus_03no5z4p1h",
  "name": "John Doe",
  "email": "john@example.com",
  "phone": "+15551234567",
  "createdAt": "2024-11-16T10:00:00Z"
}
POST/api/v1/customers/import

Bulk import customers via CSV. Send as multipart/form-data with a `file` field.

Request

curl -X POST "https://app.verifylocal.com/api/v1/customers/import" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -F "file=@customers.csv"

Response

{
  "imported": 87,
  "skipped": 3,
  "errors": [
    { "row": 12, "reason": "Invalid email format" }
  ]
}

Review Requests

GET/api/v1/requests

List all review requests with status filtering (pending, sent, completed).

Request

curl -X GET "https://app.verifylocal.com/api/v1/requests?status=sent" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "data": [
    {
      "id": "req_04pq6a5r2i",
      "customerId": "cus_03no5z4p1h",
      "channel": "sms",
      "status": "sent",
      "sentAt": "2024-11-10T11:00:00Z"
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total": 76, "pages": 4 }
}
POST/api/v1/requests

Send a review request to a customer via SMS or email.

Request

curl -X POST "https://app.verifylocal.com/api/v1/requests" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"customerId": "cus_03no5z4p1h", "channel": "sms", "message": "Hi John, how was your visit?"}'

Response

{
  "id": "req_04pq6a5r2i",
  "customerId": "cus_03no5z4p1h",
  "channel": "sms",
  "status": "sent",
  "sentAt": "2024-11-16T10:05:00Z"
}
POST/api/v1/requests/bulk

Send review requests to multiple customers in a single call.

Request

curl -X POST "https://app.verifylocal.com/api/v1/requests/bulk" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"customerIds": ["cus_03no5z4p1h", "cus_05rs7b6s3j"], "channel": "email"}'

Response

{
  "queued": 2,
  "requestIds": ["req_04pq6a5r2i", "req_07uv9d8u5l"]
}

AI Responses

GET/api/v1/responses

List AI-generated responses with optional filtering by review ID or status.

Request

curl -X GET "https://app.verifylocal.com/api/v1/responses" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "data": [
    {
      "id": "res_02lm4y3n0g",
      "reviewId": "rev_01jk3x2m9f",
      "text": "Thank you Jane! We're so glad you had a great experience.",
      "tone": "professional",
      "generatedAt": "2024-11-15T15:10:00Z",
      "published": false
    }
  ]
}
POST/api/v1/responses/generate

Generate an AI response for a specific review. Supports tone selection.

Request

curl -X POST "https://app.verifylocal.com/api/v1/responses/generate" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"reviewId": "rev_01jk3x2m9f", "tone": "professional"}'

Response

{
  "id": "res_02lm4y3n0g",
  "reviewId": "rev_01jk3x2m9f",
  "text": "Thank you Jane! We're so glad you had a great experience with us. We look forward to seeing you again soon!",
  "tone": "professional",
  "generatedAt": "2024-11-16T10:10:00Z"
}

Campaigns

GET/api/v1/campaigns

List all campaigns with status (draft, scheduled, running, completed).

Request

curl -X GET "https://app.verifylocal.com/api/v1/campaigns?status=completed" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "data": [
    {
      "id": "cam_08wx0e9v6m",
      "name": "November Re-engagement",
      "status": "completed",
      "sent": 120,
      "opened": 84,
      "createdAt": "2024-11-01T08:00:00Z"
    }
  ]
}
POST/api/v1/campaigns

Create a new campaign with a list of target customers.

Request

curl -X POST "https://app.verifylocal.com/api/v1/campaigns" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"name": "December Outreach", "customerIds": ["cus_03no5z4p1h"], "channel": "email", "message": "Hi {{name}}, how was your visit?"}'

Response

{
  "id": "cam_09yz1f0w7n",
  "name": "December Outreach",
  "status": "draft",
  "createdAt": "2024-11-16T10:15:00Z"
}
POST/api/v1/campaigns/:id/send

Execute a campaign immediately, sending messages to all targeted customers.

Request

curl -X POST "https://app.verifylocal.com/api/v1/campaigns/cam_09yz1f0w7n/send" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "id": "cam_09yz1f0w7n",
  "status": "running",
  "queued": 1,
  "startedAt": "2024-11-16T10:16:00Z"
}

Widget

GET/api/v1/widget/config

Retrieve the current widget configuration for embedding reviews on your site.

Request

curl -X GET "https://app.verifylocal.com/api/v1/widget/config" \
  -H "Authorization: Bearer vl_api_xxxxx"

Response

{
  "theme": "light",
  "accentColor": "#1a8754",
  "showRating": true,
  "maxReviews": 10,
  "platforms": ["google", "yelp"],
  "embedCode": "<script src='https://cdn.verifylocal.com/widget.js' data-key='wk_...'></script>"
}
PUT/api/v1/widget/config

Update widget display settings.

Request

curl -X PUT "https://app.verifylocal.com/api/v1/widget/config" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"theme": "dark", "maxReviews": 5, "showRating": true}'

Response

{
  "theme": "dark",
  "accentColor": "#1a8754",
  "showRating": true,
  "maxReviews": 5,
  "platforms": ["google", "yelp"],
  "updatedAt": "2024-11-16T10:20:00Z"
}

Webhooks

POST/api/v1/webhooks

Register a webhook URL to receive real-time event notifications.

Request

curl -X POST "https://app.verifylocal.com/api/v1/webhooks" \
  -H "Authorization: Bearer vl_api_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://yourdomain.com/webhooks/verifylocal", "events": ["review.created", "response.generated"]}'

Response

{
  "id": "wh_10ab2g1x8o",
  "url": "https://yourdomain.com/webhooks/verifylocal",
  "events": ["review.created", "response.generated"],
  "secret": "whsec_...",
  "active": true,
  "createdAt": "2024-11-16T10:25:00Z"
}

Rate Limits

The VerifyLocal API enforces rate limits to ensure reliability and fair usage across all integrations.

100
requests / minute
5,000
requests / hour
50,000
requests / day

Rate limit information is returned in every response header:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1700135460
When you exceed the rate limit, the API returns a 429 Too Many Requests response. Implement exponential backoff with jitter in your client.

Webhook Events

Register webhooks to receive real-time notifications when events occur in your VerifyLocal account. Each event delivers a signed JSON payload to your endpoint.

EventDescription
review.createdA new review has been received from any connected platform.
review.updatedAn existing review was edited or its status changed.
request.sentA review request was successfully sent to a customer.
response.generatedAn AI response was generated for a review.
campaign.completedA campaign finished sending to all recipients.

Example webhook payload

{
  "id": "evt_11cd3h2y9p",
  "event": "review.created",
  "createdAt": "2024-11-16T10:30:00Z",
  "data": {
    "id": "rev_12ef4i3z0q",
    "platform": "google",
    "author": "Alex Johnson",
    "rating": 4,
    "text": "Great experience overall.",
    "date": "2024-11-16T10:29:00Z"
  }
}
All webhook payloads include an X-VerifyLocal-Signature header. Verify this against your webhook secret to authenticate delivery.

SDKs

Official SDKs are in development. In the meantime, any HTTP client can be used with the REST API.

Node.jsComing Soon
npm install @verifylocal/sdk

Full Node.js SDK with type definitions, automatic retries, and pagination helpers.

PythonComing Soon
pip install verifylocal

Full Python SDK with type definitions, automatic retries, and pagination helpers.

PHPComing Soon
composer require verifylocal/sdk

Full PHP SDK with type definitions, automatic retries, and pagination helpers.

Want early access or have integration questions?

Reach out at youngvisionariesai@gmail.com