Rate Limits
The GB Chat API implements rate limiting to ensure fair usage and protect the service from abuse.
Default Limits
| Limit | Value |
|---|---|
| Requests per minute | 60 |
| Configurable | Yes |
Customizing Your Rate Limit
You can adjust your rate limit in the dashboard:
- Go to Settings > Public API
- Find the Rate Limit section
- Enter your desired requests per minute (1-1000)
- Click Save
Rate Limit Headers
Every API response includes headers to help you track your usage:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1707300660
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per minute |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the limit resets |
Rate Limit Exceeded
When you exceed the rate limit, you'll receive a 429 Too Many Requests response:
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please try again later."
}
}
Retry-After Header
The response includes a Retry-After header indicating when you can retry:
Retry-After: 30
This value is in seconds.
Best Practices
Implement Exponential Backoff
When you receive a 429 error, wait before retrying:
async function sendWithRetry(payload, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const response = await sendMessage(payload);
return response;
} catch (error) {
if (error.status === 429 && attempt < maxRetries - 1) {
const waitTime = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
await sleep(waitTime);
continue;
}
throw error;
}
}
}
Queue Your Messages
If you need to send many messages, implement a queue:
const queue = [];
const RATE_LIMIT = 60;
const INTERVAL = 60000 / RATE_LIMIT; // ~1 second between messages
async function processQueue() {
while (queue.length > 0) {
const message = queue.shift();
await sendMessage(message);
await sleep(INTERVAL);
}
}
Monitor Your Usage
Check the rate limit headers in responses to stay within limits:
function handleResponse(response) {
const remaining = response.headers['x-ratelimit-remaining'];
const reset = response.headers['x-ratelimit-reset'];
if (remaining < 10) {
console.warn(`Low rate limit: ${remaining} requests remaining`);
console.log(`Resets at: ${new Date(reset * 1000)}`);
}
}
Burst Protection
The rate limiter uses a sliding window algorithm, which means:
- Limits are calculated over a rolling 60-second window
- You can't "save up" requests from quiet periods
- Bursts are smoothed out over the window
Need Higher Limits?
If you need a higher rate limit for your use case, contact us at support@workmatic.in.