Zurvia API
Last updated: October 27, 2026
The Zurvia API lets your job software, CRM or automation tool ask a customer for a Google review the moment a job is done, and read back what happened: new Google reviews, customer replies and link clicks. It is the same API behind the Zurvia Reviews app for Zapier and every built-in connection.
Base URL and authentication
All endpoints live under https://my.zurvia.com and return JSON. Authenticate with an API key as a bearer token:
Authorization: Bearer zv_your_key_here
Create keys in Zurvia under CRM Connect › API. A key belongs to one location (one business profile); a company with several locations uses one key per location. Keys can be revoked from the same page at any time. A missing or revoked key returns 401 with {"error": "Invalid API key."}.
Create a review request
POST /api/v1/requests
Content-Type: application/json
{
"name": "Sarah Lee",
"phone": "(555) 555-0123",
"email": "sarah@example.com",
"job_id": "INV-10482",
"customer_id": "C-2201"
}
Send it when the job is finished. Zurvia applies the business's own rules before anything goes out: the send delay, the sending hours, the repeat limits (a customer is not asked again inside the business's waiting period, and never again once they have reviewed), opt-outs and blocks. Texts go to the mobile number; email is used when there is no mobile number or as the reminder.
| Field | Required | Notes |
|---|---|---|
phone or email | one of the two | Mobile number in any common format, or an email address. Form-encoded bodies and first_name + last_name are accepted too. |
name | no | The text uses the first name. |
job_id | no, recommended | Your job or invoice number. The same job_id never creates a second request, so retries are safe. invoice_id and reference are accepted as aliases. |
customer_id | no | Your customer's id, so the same person is recognised across jobs even if their number changes. external_id is an alias. |
Response, 201 for a new request or 200 when the job already had one:
{ "id": "rq_Jd93kLpQw2XcVbNm", "status": "scheduled", "duplicate": false }
{ "id": "rq_Jd93kLpQw2XcVbNm", "status": "skipped", "skip_reason": "recently_asked", "duplicate": false }
status is scheduled (it will send) or skipped. Skip reasons: recently_asked, follow_up_limit, already_reviewed, opted_out, blocked, paused, already_scheduled. A request with neither a usable phone nor email returns 400 with an error message.
Check a key
GET /api/v1/me
→ { "location": { "id": "loc_…", "name": "Buddies Exterminating" } }
Read what happened
Three read endpoints, each newest first with a stable id per item, so a polling integration can remember what it has seen. limit is optional (default 50, maximum 200).
GET /api/v1/reviews?limit=50
Google reviews on the business's profile as Zurvia has seen them. Each item: id, reviewer_name (null when the reviewer is anonymous), star_rating, comment, created_at, updated_at, customer_name and customer_id when Zurvia matched the review to one of your customers, business.
GET /api/v1/replies?limit=50
Texts and emails customers sent back to a review request. Each item: id, channel (sms or email), from_name, from, subject, message, received_at, request_id, customer_name, customer_id, business.
GET /api/v1/requests?status=clicked&limit=50
Review requests. Without status you get the most recent requests of any status; with status=clicked you get the most recent link clicks first. Other values: scheduled, sent, skipped, canceled, failed. Each item: id, status, skip_reason, customer_name, phone, email, customer_id, job_id, source, created_at, sent_at, clicked_at, business.
Webhooks instead of code
If your software can call a web address when a job is finished, you don't need the API at all. Create a webhook under CRM Connect › Webhooks in Zurvia, paste the address into your software's "job completed" automation, and Zurvia reads the name, mobile, email and job number from whatever it sends. Workiz, Tekmetric, ServiceMinder, GoHighLevel, Make and Zapier's own webhook step all work this way.
Zapier
The Zurvia Reviews app for Zapier wraps this API: a Create Review Request action, and New Google Review and New Customer Reply triggers. Connect it with the same API key.
Older integrations
The original Zurvia API keeps working unchanged for integrations built against it: GET|POST /api/createCustomer with the key in a key or X-API-KEY header (or a key parameter) and the fields name, phone, email, sendimmediately; GET /api/verifyKey; GET /api/ping. New work should use the /api/v1/ endpoints above.
Good behaviour
- Only ask people who have done business with you and whom you're allowed to contact; see the Terms of Service.
- Send one request per finished job, with the job number, and let Zurvia handle timing and repeats.
- Poll the read endpoints no more than every few minutes; nothing in them changes faster than that.
- Questions, or something you need that isn't here: support or support@zurvia.com.