Rate limits

How rate limiting works and what to do when you hit a 429.

Rate limits protect the API for everyone. They apply to groups of endpoints, such as reports, the review feed and sending messages, plus a few public and sign-in endpoints.

Every endpoint's own page also states its limit, under Rate limit. Endpoints that aren't listed on this page have no rate limit.

At a glance

LimitValueCounted per
Reports, dashboards and KPIs120 per minuteUser
Review feed300 per minuteUser
Report status and lists60 per minuteUser
Report generation and exports60 per minuteUser
Sending and AI drafts60 per minuteUser
Public and sign-in endpoints10 to 120 per minute, by endpointIP address

"User" means the user behind the token, so every token for the same user shares the allowance.

Limits by group

GroupLimitCounted perCovers
Reports, dashboards and KPIs120 per minuteUserReport data, account and partner dashboards, KPIs, charts, stats, campaign and QR reporting, billing views.
Review feed300 per minuteUserGetting reviews (the review feed).
Report status and lists60 per minuteUserChecking report status, listing past reports, flag status and history, recipient lists.
Report generation and exports60 per minuteUserGenerating insight and competitive reports, Excel and PDF exports.
Sending and AI drafts60 per minuteUserSending review requests and test messages, emailing alerts and connection links, webhook tests, AI response drafts.
Public and sign-in endpoints10 to 120 per minuteIP address (one shared counter)Sign-in, OAuth token, review-site connection links, customer feedback forms, reference lookups.

Each group has its own counter per user. Calls to the review feed don't use up your reports allowance, and the other way round.

Reports, dashboards and KPIs

120 requests per minute, counted per user. 48 endpoints.

SectionEndpointCall
InsightsAI insights summaryGET /api/v1/reports/insights
Solicit ReviewsEmail request usageGET /api/v1/solicitation/email-overage-summary
Text request usageGET /api/v1/solicitation/sms-overage-summary
ReportsHeadline numbersPOST /api/v1/partner/report/review-response/kpi
Performance by locationPOST /api/v1/partner/report/review-response/by-location
Performance by review sitePOST /api/v1/partner/report/review-response/by-site
Lifetime reviews by sitePOST /api/v1/partner/report/review-response/by-publisher
CountsGET /api/v1/partner/stats/counts
Review and response totalsGET /api/v1/partner/stats/review-response
Sentiment breakdownGET /api/v1/partner/stats/review-sentiments
Location growthGET /api/v1/partner/stats/new-vs-closed-location-count
Recent activityGET /api/v1/partner/stats/activities
Billing summaryGET /api/v1/partner/billing/overview
Billing detailGET /api/v1/partner/billing/dashboard
Billing for one accountGET /api/v1/partner/billing/account/{brandId}
Billing for one locationGET /api/v1/partner/billing/store/{storeId}
Headline numbersPOST /api/v1/reports/response/kpis
Performance by locationPOST /api/v1/reports/response/locationlist
Performance by review sitePOST /api/v1/reports/response/reviews/site
Lifetime reviews by sitePOST /api/v1/reports/response/reviews/publisher
Star rating breakdownGET /api/v1/reviews/stats
Ranking reportPOST /api/v1/reports/ranking
Headline countsGET /api/v1/account/dashboard/reviews/count
Average rating over timeGET /api/v1/account/dashboard/get-averagerating-chart
Reviews over timeGET /api/v1/account/dashboard/get-totalreview-chart
Responses over timeGET /api/v1/account/dashboard/get-totalresponse-chart
Response time over timeGET /api/v1/account/dashboard/get-responsetime-chart
Review requests over timeGET /api/v1/account/dashboard/get-reviewrequests-chart
Rating breakdownGET /api/v1/account/dashboard/get-review-rating-breakdown
Reviews by siteGET /api/v1/account/dashboard/get-review-site-distribution
SentimentGET /api/v1/account/dashboard/sentiment-overview
This year versus lastGET /api/v1/account/dashboard/get-annual-volume-rating-stats
Top locationsGET /api/v1/account/dashboard/get-top-performing-locations
Monthly rankingGET /api/v1/account/dashboard/get-ranking-report
Twelve-month rankingGET /api/v1/account/dashboard/get-overall-ranking-bylocation-last12months
Annual volume and ratingPOST /api/v1/graph/annual-volume
Request totalsGET /api/v1/campaign/dashboard/metrics
Email results for a campaignGET /api/v1/campaign/{campaignId}/report/email
Email delivery comparisonGET /api/v1/campaign/{campaignId}/report/delivered-comparison
Email links clickedGET /api/v1/campaign/{campaignId}/report/email/click-urls
Text results for a campaignGET /api/v1/campaign/{campaignId}/report/sms
Text links clickedGET /api/v1/campaign/{campaignId}/report/sms/click-urls
Click events for a linkGET /api/v1/campaign/click-url/{click_url_id}/events
Scans by QR codeGET /api/v1/qr-codes/stats
Scan history for a codeGET /api/v1/qr-codes/{qrCodeId}/scan-history
Scans by designGET /api/v1/qr-codes/template/stats
Scan history for a designGET /api/v1/qr-codes/template/{templateId}/scan-history
AdvancedPreview partner chargesPOST /api/v1/billing/checkout-details

Review feed

300 requests per minute, counted per user. 1 endpoint.

SectionEndpointCall
Review DataGet reviews for a locationPOST /api/v1/partner/report/review-response/feed

Report status and lists

60 requests per minute, counted per user. 10 endpoints.

SectionEndpointCall
InsightsCheck report statusPOST /api/v1/account/insight-report/status
Get the latest reportPOST /api/v1/account/insight-report/latest
List comparison themesPOST /api/v1/account/competitive-report/themes
Check report statusPOST /api/v1/account/competitive-report/status
List past reportsPOST /api/v1/account/competitive-report/list
Review RemovalCheck a flag's statusGET /api/v1/reviews/{reviewId}/flag/status
See flag historyGET /api/v1/reviews/flag/history
ReportsList scheduled reportsPOST /api/v1/email-report/list
Email recipients and statusGET /api/v1/campaign/{campaignId}/recipients/email
Text recipients and statusGET /api/v1/campaign/{campaignId}/recipients/sms

Report generation and exports

60 requests per minute, counted per user. 9 endpoints.

SectionEndpointCall
Review DataExport site setup to a spreadsheetPOST /api/v1/store-review-site/excel/list
InsightsGenerate an insight reportPOST /api/v1/account/insight-report
Generate last month's reportPOST /api/v1/account/insight-report/generate
Generate a competitive reportPOST /api/v1/account/competitive-report
ReportsExport to ExcelPOST /api/v1/partner/excel/download/review-response-feed
Export performance report to PDFPOST /api/v1/partner/pdf/download/performance-report
Export locations to ExcelGET /api/v1/reports/excel/locations
Export to ExcelPOST /api/v1/reports/excel/review-response-feed
Export performance report to PDFPOST /api/v1/reports/pdf/performance-report

Sending and AI drafts

60 requests per minute, counted per user. 9 endpoints.

SectionEndpointCall
SetupSend a test eventPOST /api/v1/partner/webhooks/{webhookSubscriptionId}/test
Email a problem to someonePOST /api/v1/partner/error-notifications/send-email-notification
Review DataSend the business owner a connection linkPOST /api/v1/store-review-site/send/request
RespondDraft a response with AIPOST /api/v1/account/generate-ai-response
Solicit ReviewsSend a review request to a customerPOST /api/v1/campaign/review-request
Send a review request from a kioskPOST /api/v1/campaign/kiosk-review-request
Send a test email to yourselfPOST /api/v1/campaign/test-email-review-request
Send a test text to yourselfPOST /api/v1/campaign/test-sms-review-request
Widgets and displaySend a test emailPOST /api/v1/account/white-label/email-templates/send-test

Public and sign-in endpoints

These limits are counted per IP address, except Get a token for an account, which is counted per user. They share one counter: calls to one count against the others, and each endpoint stops you at its own limit.

SectionEndpointCallLimit
SetupList plans visible to an accountGET /api/v1/plans/list100 per minute
Step 3: Exchange the code for a tokenPOST /oauth/token60 per minute
Review DataGet one site connectionGET /api/v1/store-review-site/show/{storeReviewSiteId}30 per minute
Set a site's URLs and credentialsPOST /api/v1/store-review-site/update30 per minute
Get the manager-invite address for a sitePOST /api/v1/store-review-site/{id}/connect30 per minute
Turn review collection on or offPOST /api/v1/store-review-site/change-scrapper-status30 per minute
Disconnect response postingPOST /api/v1/store-review-site/remove30 per minute
Solicit ReviewsRecord private feedback from a customerPOST /api/v1/campaign/direct-comment-feedback30 per minute
Send a customer's comment to the businessPOST /api/v1/campaign/direct-to-company-email30 per minute
AdvancedJumpCloud: start sign-inGET /api/v1/auth/sso/jumpcloud/redirect10 per minute
JumpCloud: callbackGET /api/v1/auth/sso/jumpcloud/callback10 per minute
JumpCloud: exchange the codeGET /api/v1/auth/sso/exchange10 per minute
Check which sign-in methods an email can usePOST /api/v1/auth/discover10 per minute
List countriesGET /api/v1/address/countries100 per minute
List statesGET /api/v1/address/states100 per minute
List citiesGET /api/v1/address/cities100 per minute
Get feature optionsGET /api/v1/feature-options100 per minute
Get a token for an accountPOST /api/v1/partner/account-owner/token120 per minute per user

Every response tells you where you stand

You do not have to count requests yourself. Every response from an endpoint with a limit carries headers showing the limit and how many requests remain. Read them and back off before you hit zero rather than waiting for an error.

HeaderSentMeaning
X-RateLimit-LimitEvery response from an endpoint with a limitThe limit for that endpoint
X-RateLimit-RemainingEvery response from an endpoint with a limitRequests left in the current window
Retry-After429 onlySeconds until you can retry
X-RateLimit-Reset429 onlyUnix timestamp when the window resets

What happens when you exceed a limit

The request is rejected with 429 Too Many Requests. Retry after the number of seconds in Retry-After. Handle this as a normal condition rather than a failure: a busy integration will hit a limit occasionally.

{ "message": "Too Many Attempts." }
📘

Plan allowances are separate from rate limits. Features billed by usage, such as review requests, have a monthly allowance; a call that would go over it returns 402. That limits monthly volume, not request rate.

Designing around the limits

Group limits are counted per user, so every server and token acting as the same user shares one allowance. Two patterns keep your integration fast and well inside the limits:

  • Store review data on your side and refresh it when we tell you it has changed, rather than calling the review feed every time a page loads. See Webhooks.
  • Cache the KPI and report responses for a period that suits your product, rather than calling them per page view.

Spread bulk work over time rather than sending it in one burst, and read X-RateLimit-Remaining as you go.


Did this page help you?