Rate Limiting
The Brandsearch API enforces rate limits and quotas to ensure fair usage. This page explains the limits by tier and how to handle them.
Rate limits by tier
Rate limits are applied per API key. Each tier has different limits across multiple time windows.
- Name
Starter- Type
- tier
- Description
3 req/s, 15 req/min, 300 req/hr, 3,000 req/day
- Name
Outscaler- Type
- tier
- Description
10 req/s, 60 req/min, 1,000 req/hr, 10,000 req/day
- Name
Agency- Type
- tier
- Description
30 req/s, 200 req/min, 5,000 req/hr, 50,000 req/day
Rate limit exceeded response
{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded.",
"details": {
"retry_after": 12,
"window": "1m"
}
}
}
Quotas
In addition to rate limits, each API key has daily and monthly request quotas.
| Tier | Daily Quota | Monthly Quota |
|---|---|---|
| Starter | 3,000 | 50,000 |
| Outscaler | 10,000 | 200,000 |
| Agency | 50,000 | 1,000,000 |
Quotas reset automatically — daily quotas reset at midnight UTC, and monthly quotas reset on the 1st of each month.
Quota response headers
Every API response includes headers showing your current quota usage:
- Name
X-Quota-Daily-Remaining- Type
- integer
- Description
Requests remaining for the current day.
- Name
X-Quota-Monthly-Remaining- Type
- integer
- Description
Requests remaining for the current month.
- Name
X-Quota-Daily-Limit- Type
- integer
- Description
Your total daily limit.
- Name
X-Quota-Monthly-Limit- Type
- integer
- Description
Your total monthly limit.
Handling rate limits
When you hit a rate limit, the API returns a 429 status with a Retry-After header. The best practice is to implement exponential backoff:
Handling rate limits
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options)
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get('Retry-After') || '1')
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000))
continue
}
return response
}
throw new Error('Max retries exceeded')
}
Monitor your X-Quota-Daily-Remaining and X-Quota-Monthly-Remaining headers to proactively manage your usage and avoid hitting limits.