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
| Limit | Value | Counted per |
|---|---|---|
| Reports, dashboards and KPIs | 120 per minute | User |
| Review feed | 300 per minute | User |
| Report status and lists | 60 per minute | User |
| Report generation and exports | 60 per minute | User |
| Sending and AI drafts | 60 per minute | User |
| Public and sign-in endpoints | 10 to 120 per minute, by endpoint | IP address |
"User" means the user behind the token, so every token for the same user shares the allowance.
Limits by group
| Group | Limit | Counted per | Covers |
|---|---|---|---|
| Reports, dashboards and KPIs | 120 per minute | User | Report data, account and partner dashboards, KPIs, charts, stats, campaign and QR reporting, billing views. |
| Review feed | 300 per minute | User | Getting reviews (the review feed). |
| Report status and lists | 60 per minute | User | Checking report status, listing past reports, flag status and history, recipient lists. |
| Report generation and exports | 60 per minute | User | Generating insight and competitive reports, Excel and PDF exports. |
| Sending and AI drafts | 60 per minute | User | Sending review requests and test messages, emailing alerts and connection links, webhook tests, AI response drafts. |
| Public and sign-in endpoints | 10 to 120 per minute | IP 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.
| Section | Endpoint | Call |
|---|---|---|
| Insights | AI insights summary | GET /api/v1/reports/insights |
| Solicit Reviews | Email request usage | GET /api/v1/solicitation/email-overage-summary |
| Text request usage | GET /api/v1/solicitation/sms-overage-summary | |
| Reports | Headline numbers | POST /api/v1/partner/report/review-response/kpi |
| Performance by location | POST /api/v1/partner/report/review-response/by-location | |
| Performance by review site | POST /api/v1/partner/report/review-response/by-site | |
| Lifetime reviews by site | POST /api/v1/partner/report/review-response/by-publisher | |
| Counts | GET /api/v1/partner/stats/counts | |
| Review and response totals | GET /api/v1/partner/stats/review-response | |
| Sentiment breakdown | GET /api/v1/partner/stats/review-sentiments | |
| Location growth | GET /api/v1/partner/stats/new-vs-closed-location-count | |
| Recent activity | GET /api/v1/partner/stats/activities | |
| Billing summary | GET /api/v1/partner/billing/overview | |
| Billing detail | GET /api/v1/partner/billing/dashboard | |
| Billing for one account | GET /api/v1/partner/billing/account/{brandId} | |
| Billing for one location | GET /api/v1/partner/billing/store/{storeId} | |
| Headline numbers | POST /api/v1/reports/response/kpis | |
| Performance by location | POST /api/v1/reports/response/locationlist | |
| Performance by review site | POST /api/v1/reports/response/reviews/site | |
| Lifetime reviews by site | POST /api/v1/reports/response/reviews/publisher | |
| Star rating breakdown | GET /api/v1/reviews/stats | |
| Ranking report | POST /api/v1/reports/ranking | |
| Headline counts | GET /api/v1/account/dashboard/reviews/count | |
| Average rating over time | GET /api/v1/account/dashboard/get-averagerating-chart | |
| Reviews over time | GET /api/v1/account/dashboard/get-totalreview-chart | |
| Responses over time | GET /api/v1/account/dashboard/get-totalresponse-chart | |
| Response time over time | GET /api/v1/account/dashboard/get-responsetime-chart | |
| Review requests over time | GET /api/v1/account/dashboard/get-reviewrequests-chart | |
| Rating breakdown | GET /api/v1/account/dashboard/get-review-rating-breakdown | |
| Reviews by site | GET /api/v1/account/dashboard/get-review-site-distribution | |
| Sentiment | GET /api/v1/account/dashboard/sentiment-overview | |
| This year versus last | GET /api/v1/account/dashboard/get-annual-volume-rating-stats | |
| Top locations | GET /api/v1/account/dashboard/get-top-performing-locations | |
| Monthly ranking | GET /api/v1/account/dashboard/get-ranking-report | |
| Twelve-month ranking | GET /api/v1/account/dashboard/get-overall-ranking-bylocation-last12months | |
| Annual volume and rating | POST /api/v1/graph/annual-volume | |
| Request totals | GET /api/v1/campaign/dashboard/metrics | |
| Email results for a campaign | GET /api/v1/campaign/{campaignId}/report/email | |
| Email delivery comparison | GET /api/v1/campaign/{campaignId}/report/delivered-comparison | |
| Email links clicked | GET /api/v1/campaign/{campaignId}/report/email/click-urls | |
| Text results for a campaign | GET /api/v1/campaign/{campaignId}/report/sms | |
| Text links clicked | GET /api/v1/campaign/{campaignId}/report/sms/click-urls | |
| Click events for a link | GET /api/v1/campaign/click-url/{click_url_id}/events | |
| Scans by QR code | GET /api/v1/qr-codes/stats | |
| Scan history for a code | GET /api/v1/qr-codes/{qrCodeId}/scan-history | |
| Scans by design | GET /api/v1/qr-codes/template/stats | |
| Scan history for a design | GET /api/v1/qr-codes/template/{templateId}/scan-history | |
| Advanced | Preview partner charges | POST /api/v1/billing/checkout-details |
Review feed
300 requests per minute, counted per user. 1 endpoint.
| Section | Endpoint | Call |
|---|---|---|
| Review Data | Get reviews for a location | POST /api/v1/partner/report/review-response/feed |
Report status and lists
60 requests per minute, counted per user. 10 endpoints.
| Section | Endpoint | Call |
|---|---|---|
| Insights | Check report status | POST /api/v1/account/insight-report/status |
| Get the latest report | POST /api/v1/account/insight-report/latest | |
| List comparison themes | POST /api/v1/account/competitive-report/themes | |
| Check report status | POST /api/v1/account/competitive-report/status | |
| List past reports | POST /api/v1/account/competitive-report/list | |
| Review Removal | Check a flag's status | GET /api/v1/reviews/{reviewId}/flag/status |
| See flag history | GET /api/v1/reviews/flag/history | |
| Reports | List scheduled reports | POST /api/v1/email-report/list |
| Email recipients and status | GET /api/v1/campaign/{campaignId}/recipients/email | |
| Text recipients and status | GET /api/v1/campaign/{campaignId}/recipients/sms |
Report generation and exports
60 requests per minute, counted per user. 9 endpoints.
| Section | Endpoint | Call |
|---|---|---|
| Review Data | Export site setup to a spreadsheet | POST /api/v1/store-review-site/excel/list |
| Insights | Generate an insight report | POST /api/v1/account/insight-report |
| Generate last month's report | POST /api/v1/account/insight-report/generate | |
| Generate a competitive report | POST /api/v1/account/competitive-report | |
| Reports | Export to Excel | POST /api/v1/partner/excel/download/review-response-feed |
| Export performance report to PDF | POST /api/v1/partner/pdf/download/performance-report | |
| Export locations to Excel | GET /api/v1/reports/excel/locations | |
| Export to Excel | POST /api/v1/reports/excel/review-response-feed | |
| Export performance report to PDF | POST /api/v1/reports/pdf/performance-report |
Sending and AI drafts
60 requests per minute, counted per user. 9 endpoints.
| Section | Endpoint | Call |
|---|---|---|
| Setup | Send a test event | POST /api/v1/partner/webhooks/{webhookSubscriptionId}/test |
| Email a problem to someone | POST /api/v1/partner/error-notifications/send-email-notification | |
| Review Data | Send the business owner a connection link | POST /api/v1/store-review-site/send/request |
| Respond | Draft a response with AI | POST /api/v1/account/generate-ai-response |
| Solicit Reviews | Send a review request to a customer | POST /api/v1/campaign/review-request |
| Send a review request from a kiosk | POST /api/v1/campaign/kiosk-review-request | |
| Send a test email to yourself | POST /api/v1/campaign/test-email-review-request | |
| Send a test text to yourself | POST /api/v1/campaign/test-sms-review-request | |
| Widgets and display | Send a test email | POST /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.
| Section | Endpoint | Call | Limit |
|---|---|---|---|
| Setup | List plans visible to an account | GET /api/v1/plans/list | 100 per minute |
| Step 3: Exchange the code for a token | POST /oauth/token | 60 per minute | |
| Review Data | Get one site connection | GET /api/v1/store-review-site/show/{storeReviewSiteId} | 30 per minute |
| Set a site's URLs and credentials | POST /api/v1/store-review-site/update | 30 per minute | |
| Get the manager-invite address for a site | POST /api/v1/store-review-site/{id}/connect | 30 per minute | |
| Turn review collection on or off | POST /api/v1/store-review-site/change-scrapper-status | 30 per minute | |
| Disconnect response posting | POST /api/v1/store-review-site/remove | 30 per minute | |
| Solicit Reviews | Record private feedback from a customer | POST /api/v1/campaign/direct-comment-feedback | 30 per minute |
| Send a customer's comment to the business | POST /api/v1/campaign/direct-to-company-email | 30 per minute | |
| Advanced | JumpCloud: start sign-in | GET /api/v1/auth/sso/jumpcloud/redirect | 10 per minute |
| JumpCloud: callback | GET /api/v1/auth/sso/jumpcloud/callback | 10 per minute | |
| JumpCloud: exchange the code | GET /api/v1/auth/sso/exchange | 10 per minute | |
| Check which sign-in methods an email can use | POST /api/v1/auth/discover | 10 per minute | |
| List countries | GET /api/v1/address/countries | 100 per minute | |
| List states | GET /api/v1/address/states | 100 per minute | |
| List cities | GET /api/v1/address/cities | 100 per minute | |
| Get feature options | GET /api/v1/feature-options | 100 per minute | |
| Get a token for an account | POST /api/v1/partner/account-owner/token | 120 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.
| Header | Sent | Meaning |
|---|---|---|
X-RateLimit-Limit | Every response from an endpoint with a limit | The limit for that endpoint |
X-RateLimit-Remaining | Every response from an endpoint with a limit | Requests left in the current window |
Retry-After | 429 only | Seconds until you can retry |
X-RateLimit-Reset | 429 only | Unix 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.
Updated 17 days ago
