VerifyLocal API
Build integrations with our reviews and reputation management platform. Access your reviews, customers, campaigns, and more via a clean REST API.
Authentication
All API requests must include your API key as a Bearer token in the Authorization header. API keys are managed in Settings → Integrations.
Example request header
Authorization: Bearer vl_api_xxxxxComplete 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_a1b2c3d4e5f6g7h8Endpoints
Base URL: https://app.verifylocal.com. All endpoints return JSON and require authentication.
Reviews
/api/v1/reviewsList 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
}
}/api/v1/reviews/:idRetrieve 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"
}
}/api/v1/reviews/statsGet 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
/api/v1/customersList 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 }
}/api/v1/customersCreate 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"
}/api/v1/customers/importBulk 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
/api/v1/requestsList 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 }
}/api/v1/requestsSend 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"
}/api/v1/requests/bulkSend 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
/api/v1/responsesList 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
}
]
}/api/v1/responses/generateGenerate 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
/api/v1/campaignsList 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"
}
]
}/api/v1/campaignsCreate 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"
}/api/v1/campaigns/:id/sendExecute 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
/api/v1/widget/configRetrieve 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>"
}/api/v1/widget/configUpdate 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
/api/v1/webhooksRegister 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.
Rate limit information is returned in every response header:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1700135460429 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.
| Event | Description |
|---|---|
review.created | A new review has been received from any connected platform. |
review.updated | An existing review was edited or its status changed. |
request.sent | A review request was successfully sent to a customer. |
response.generated | An AI response was generated for a review. |
campaign.completed | A 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"
}
}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.
npm install @verifylocal/sdkFull Node.js SDK with type definitions, automatic retries, and pagination helpers.
pip install verifylocalFull Python SDK with type definitions, automatic retries, and pagination helpers.
composer require verifylocal/sdkFull PHP SDK with type definitions, automatic retries, and pagination helpers.
Want early access or have integration questions?
Reach out at youngvisionariesai@gmail.com