Reference
Rate Limits
Request limits by plan
Rate Limits
LawForge enforces rate limits to ensure fair usage and service stability.
Limits by Plan
| Plan | Requests/Month | Rate Limit | Price |
|---|---|---|---|
| Anonymous | 10 | 3/min | Free |
| Free | 50 | 10/min | Free |
| Pro | 2,000 | 60/min | $19/mo |
Rate Limit Headers
Every response includes rate limit information:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1704067200| Header | Description |
|---|---|
X-RateLimit-Limit | Requests allowed per minute |
X-RateLimit-Remaining | Requests remaining this minute |
X-RateLimit-Reset | Unix timestamp when limit resets |
Exceeding Limits
When you exceed the rate limit:
- HTTP 429 status code is returned
Retry-Afterheader indicates wait time- Error body contains explanation
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please wait 60 seconds."
}
}Best Practices
Implement Backoff
Use exponential backoff when hitting limits:
async function fetchWithRetry(url: string, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url);
if (response.status !== 429) return response;
const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
await sleep(retryAfter * 1000 * Math.pow(2, i));
}
throw new Error("Max retries exceeded");
}Cache Results
Cache responses to reduce requests:
- Case text rarely changes
- Court metadata is static
- Citation networks update less frequently
Batch Requests
Where possible, batch operations:
- Use broader searches instead of many narrow ones
- Retrieve multiple documents in one session
- Plan research workflows to minimize requests
Monitoring Usage
Track your usage at lawforge.io/settings/usage.
Upgrading
Need higher limits? View pricing plans.