Developer API
JSON over HTTPS on your Zyene workspace. Examples below use https://app.zyenereviews.com, the same host as the dashboard.
Authentication
Create or rotate a key under Integrations → Developer API in the dashboard. Send it on every request as X-API-Key: zy_… or Authorization: Bearer zy_…. Each endpoint enforces the scope listed below.
Keep API keys on your server. If a request returns 403, verify the key’s scope and selected business. Contact support with the endpoint and status code if access still fails; never share the key itself.
Base URL
Point clients at the same host that serves your dashboard (for example https://app.zyenereviews.com). Use a server-side integration so your API key stays private.
Endpoints
/api/v1/requests/sendSend a review request via SMS or email. Required scope: review_requests:write.
curl -X POST "https://app.zyenereviews.com/api/v1/requests/send" \ -H "X-API-Key: zy_..." \ -H "Content-Type: application/json" \ -d '{"customerName":"Alex","customerPhone":"+18165551234","channel":"sms"}'/api/v1/reviewsList reviews with pagination and filters. Required scope: reviews:read.
curl "https://app.zyenereviews.com/api/v1/reviews?page=1&limit=20&status=pending&minRating=4" \ -H "X-API-Key: zy_..."/api/v1/analyticsAggregate review and request activity. Required scope: analytics:read.
curl "https://app.zyenereviews.com/api/v1/analytics?days=30" \ -H "X-API-Key: zy_..."Responses and retries
Successful calls return success: true with a data object. Errors return success: false and an error message.
{"success":true,"data":{"page":1,"limit":20,"total":0,"reviews":[]}}- 400: Correct the payload or contact details before retrying.
- 401: Check whether your key is missing, revoked or expired.
- 403: Check endpoint scope, business access and sending allowances.
- 429: Your key’s request limit was reached. Wait before retrying and use increasing delays.
- 500/503: Retry read requests with a bounded delay; contact support if failures persist.
Pagination and metrics
Reviews use page-based pagination: page starts at 1 and limit defaults to 20, with a maximum of 100. Stop when the returned reviews are empty or page × limit reaches total. Status values are pending, responded and ignored; minRating accepts 1–5.
Analytics accepts days from 1–365. Request completion includes feedback submissions and Google handoffs. Neither completed nor the legacy reviewLeft field proves a review was published. Synced reviews are reported separately.
Sending requests
Send channel as sms (default), email, both or link. SMS requires a phone number with country code; email requires a valid address; both requires both details. Link creates a shareable request without sending a message.
The result contains requestId, status, channel and reviewLink. Check warning: for both channels, one delivery can fail while the other succeeds. A sent status is not a delivery receipt or proof of publication.
The send endpoint does not accept an idempotency key. After a timeout, check Requests in the dashboard before resending. Frequency caps help prevent repeated requests but are not a substitute for retry tracking in your integration.
Need a new key? Open Integrations in the app (you must be signed in).