Rate limits control how many requests your company can make to the Listen API in a period of time. When a limit is exceeded, the API responds with 429 Too Many Requests until the window resets.
How rate limits work
| Concept | Description |
|---|---|
| Bucket | Every endpoint belongs to a bucket. Endpoints in the same bucket share one limit. |
| Company Scope | Requests made with all API keys of your company count together. |
| Access tier | Your API access tier, Free or Premium, sets the limits. |
| 15-minute window | Applies to every bucket. Resets every quarter of an hour. |
| Monthly window | A calendar month (UTC), reset at 00:00 UTC on the 1st. Applies to search and lookup buckets on Free, and to project changes on Premium. |
Requests rejected with 429 do not count towards either window.
Checking your limits
Every response includes headers with the usage of the endpoint's bucket
x-rate-limit-limit: 100
x-rate-limit-remaining: 42
x-rate-limit-reset: 1793718000
| Header | Description |
|---|---|
x-rate-limit-limit | Maximum number of requests in the current time-window |
x-rate-limit-remaining | Requests remaining in the current 15-minute window |
x-rate-limit-reset | Unix timestamp (seconds) when the 15-minute window resets |
A request is rejected when either window has no requests remaining, so the number of requests you can still make is the lower of the two remaining values.
Rate limit tables
Below you'll find rate-limits for each API Tier
Buckets
| Bucket | Endpoints |
|---|---|
projects-read | GET /v2/projectsGET /v2/projects/{projectId} |
projects-write | POST /v2/projectsPUT /v2/projects/{projectId} |
projects-delete | DELETE /v2/projects/{projectId} |
recent-search | POST /v2/projects/{projectId}/mentions/recent/searchPOST /v2/discussions/{discussionId}/mentions/recent/search |
historical-search | POST /v2/projects/{projectId}/mentions/searchPOST /v2/discussions/{discussionId}/mentions/search |
mention-lookup | GET /v2/mentions/{mentionId} |
mention-parent-search | GET /v2/mentions/{mentionId}/parent |
mention-write | POST /v2/mentions/{mentionId}/tagsDELETE /v2/mentions/{mentionId}/tags |
recent-stream | POST /v2/projects/{projectId}/mentions/recent/search/streamPOST /v2/projects/{projectId}/mentions/recent/search/stream/livePOST /v2/discussions/{discussionId}/mentions/recent/search/streamPOST /v2/discussions/{discussionId}/mentions/recent/search/stream/live |
historical-stream | POST /v2/projects/{projectId}/mentions/search/streamPOST /v2/discussions/{discussionId}/mentions/search/stream |
engagement-stream | POST /v2/mentions/engagement/updates/stream/live |
Premium tier
| Bucket | Per 15 minutes | Per month |
|---|---|---|
projects-read | 1,000 | — |
projects-write | 25 | 8 × your projects limit |
projects-delete | 1,000 | — |
recent-search | 100 | — |
historical-search | 20 | — |
mention-lookup | 500 | — |
mention-parent-search | 100 | — |
mention-write | 250 | — |
recent-stream | 500 | — |
historical-stream | 50 | — |
engagement-stream | 500 | — |
— means no monthly limit.
Monthly limit for projects-write bucket depends on number of projectsCreating and amending projects through API has additional monthly limit that depends on the projects limit you have on your account. Its equal to 8 × the projects limit of your package.
EXAMPLE
- With a limit of 10 projects, you can create or update projects 80 times a month through API
- This means you can replace every project 8 times a month using API
Free tier
| Bucket | Per 15 minutes | Per month |
|---|---|---|
projects-read | 1,000 | — |
recent-search | 100 | 500 |
mention-lookup | 500 | 500 |
mention-parent-search | 100 | 500 |
— means no monthly limit. Endpoints of the other buckets are not available on the Free tier.
Concurrency limit (Streams)
Streaming endpoints are subject to additional concurrency limitations.
- 2 concurrent mention streams (recent, historical and live streams share them)
- 1 concurrent engagement stream
Handling rate limits
When a limit is exceeded, the API responds with 429 Too Many Requests:
{"message":"Rate limit of requests for this endpoint has been reached. Maximum number of requests for this endpoint is 500 per calendar month. Limits will reset at 2026-12-01T00:00:00.000Z."}The message says which window was used up: per 15 minutes or per calendar month.
Recovery strategy
- Read the
resetheader of the window that has no requests remaining:x-rate-limit-resetfor the 15-minute window,x-rate-limit-monthly-resetfor the monthly window. - Wait until that time before retrying.
- Retry the request.
import time
import requests
def make_request_with_retry(url, headers, payload):
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 429:
monthly_exhausted = response.headers.get("x-rate-limit-monthly-remaining") == "0"
reset_header = "x-rate-limit-monthly-reset" if monthly_exhausted else "x-rate-limit-reset"
reset_time = int(response.headers.get(reset_header, 0))
time.sleep(max(reset_time - time.time(), 60))
return make_request_with_retry(url, headers, payload)
return responseBest practices
- Use export streams for bulk extraction. A paginated search returns up to 50 mentions per request; an export stream delivers all matching mentions over one connection.
- Use live streams for new mentions instead of polling recent search.
- Monitor the headers. Track
x-rate-limit-remainingand, where present,x-rate-limit-monthly-remainingto slow down before reaching a limit. - Spread requests across the window instead of sending them in bursts.
Rate limits and the mentions cap
Rate limits and the mentions cap are separate:
| Concept | What it counts |
|---|---|
| Rate limits | Requests per bucket, in the 15-minute and monthly windows |
