Developers · API reference
Biz Review Radar REST API
A versioned OpenAPI 3.1 surface for businesses, analyses, reports, recommendations, review reply drafts, and webhooks. This overview is public; the full interactive reference and spec download live in the signed-in developer portal.
Base URL
https://bizreviewradar.com/api/v1Use this for every integration today. All examples on this page use it.
https://api.bizreviewradar.comA dedicated API host is planned. It is not live yet: DNS and routing must be verified before docs, SDKs, or clients switch to it. Do not point production traffic at it.
When the dedicated host goes live, paths stay identical (/v1/…) and the current base URL keeps working.
Authentication
API keys
Send Authorization: Bearer brr_test_…. Test-prefixed keys are issued for demo and private integrations. Live keys (brr_live_…) are issued by an administrator and only accepted while the live-keys flag is enabled for the account — assume test keys unless you have been told otherwise. Keys are shown once, stored only as a hash, and bound to your account's locked business.
OAuth 2.0 client-credentials
For your own backend. Exchange a client ID and secret at POST /api/oauth/token for a short-lived JWT, then send it as a bearer token. See the OAuth guide.
OAuth 2.0 authorization-code + PKCE
Implemented but disabled by default. Third-party public app registration is not open.
Main resources
Paths are relative to the base URL. Availability of individual resources depends on your plan's API entitlement.
Businesses
Your account's business record and its tracked competitors.
- GET /businesses
- GET /businesses/{id}
- GET /businesses/{id}/competitors
Analyses
Competitor review analyses for a business.
- GET /businesses/{id}/analyses
- GET /analyses/{id}
Reports
Generated report documents tied to an analysis or purchase.
- GET /reports/{id}
Recommendations
Prioritised, actionable recommendations for a business.
- GET /businesses/{id}/recommendations
Review replies
AI-drafted review replies. Drafts only — you approve and post them.
- POST /review-replies
Webhooks
Endpoints, delivery history, test events, and secret rotation.
- GET /webhooks
- POST /webhooks
- GET /webhooks/{id}
- GET /webhooks/{id}/deliveries
- POST /webhooks/{id}/test
- POST /webhooks/{id}/rotate-secret
- POST /webhook-deliveries/{id}/resend
Events
Usage and account activity events for your API traffic.
- GET /events
Example request and response
Dummy data for illustration.
curl https://bizreviewradar.com/api/v1/businesses/biz_123/analyses?limit=1 \ -H "Authorization: Bearer brr_test_YOUR_KEY" \ -H "Accept: application/json"
HTTP/1.1 200 OK
Content-Type: application/json
X-Request-Id: req_9f1c0d
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 41
{
"data": [
{
"id": "an_456",
"business_id": "biz_123",
"status": "completed",
"created_at": "2026-07-28T09:12:34Z",
"competitors_analyzed": 9,
"summary": {
"positives": ["Fast service", "Friendly staff"],
"negatives": ["Wait times on weekends"],
"priorities": [
{ "priority": 1, "action": "Reply to 3 recent 1-star reviews" },
{ "priority": 2, "action": "Post 2 fresh photos this week" }
]
}
}
],
"meta": {
"request_id": "req_9f1c0d",
"plan": "core",
"rate_limit": { "limit": 60, "remaining": 59, "reset_s": 41 },
"page": { "limit": 1, "next_cursor": "YW5fNDU2" }
}
}Every successful response wraps the payload in data and adds a meta object with the request ID, plan, rate-limit snapshot, and page info where applicable.
Error format
Errors use the same envelope with an error object instead of data. Branch on the stable machine-readable code, not on the human-readable message. Internal exception details are never returned.
HTTP/1.1 429 Too Many Requests
Retry-After: 37
{
"error": {
"code": "rate_limited",
"message": "API key rate limit exceeded."
},
"meta": { "request_id": "req_9f1c0d" }
}unauthorized — missing, malformed, revoked, or expired credential (401).
forbidden — authenticated but not entitled to the resource (403).
not_found — unknown ID, or not owned by your account (404).
invalid_request — validation failure on body or query (400).
rate_limited — rate limit or quota exceeded (429).
internal_error — unexpected server error; retry with backoff (500).
Pagination and limits
List endpoints use cursor pagination. Pass ?limit= (bounded server-side, with a sensible default) and ?cursor=. Read the next cursor from meta.page.next_cursor; when it is null you have reached the end. Do not construct cursors yourself — treat them as opaque strings.
curl "https://bizreviewradar.com/api/v1/businesses/biz_123/analyses?limit=25&cursor=YW5fNDU2" \ -H "Authorization: Bearer brr_test_YOUR_KEY"
Rate limits and fair use
Limits are applied per IP, per account, and per API key on a sliding window, and the configured numbers are adjustable by administrators. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset; a 429 also carries Retry-After. Plan-level usage quotas apply on top of rate limits for metered actions such as running analyses.
Fair use: honour Retry-After, back off exponentially, cache responses where you can, and prefer webhooks over polling. Sustained abusive traffic can have its keys throttled or revoked.
Full OpenAPI 3.1 reference
The interactive reference, downloadable openapi.yaml, and per-endpoint cURL examples are available in the authenticated developer portal, alongside your keys, webhooks, and usage logs.