Rate Limits & Quotas
Understand how vfrog.ai manages API usage through rate limits and monthly quotas.
Overview
vfrog.ai implements rate limiting and quota management to ensure fair usage and system stability. Each API key has:
- Monthly Quota: Maximum number of requests per month
- Rate Limits: Maximum requests per second/minute
Monthly Quotas
Every API key has a monthly quota that determines how many requests you can make per calendar month.
Default Quotas
- Starter Plan: 20,000 calls/month
- Pro Plan: 50,000 calls/month
- Business Plan: 100,000 calls/month
- Enterprise Plan: Custom quotas
### Checking Your Quota
View your current usage in the [Console](https://console.vfrog.ai):
1. Navigate to **API Keys**
2. Click on a key to view details
3. See usage statistics:
- Requests used this month
- Remaining requests
- Usage percentage
- Reset date
### Quota Reset
Quotas reset on the first day of each calendar month at 00:00 UTC.
## Rate Limits
In addition to monthly quotas, vfrog.ai enforces rate limits to prevent abuse:
| Endpoint | Rate Limit |
| ---------------------------- | ------------------- |
| `/v1/cv/requests/sync` (Sync) | 10 requests/minute |
### Rate Limit Headers
Every API response includes headers showing your current rate limit status:
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 95 X-RateLimit-Reset: 1640995200
- `X-RateLimit-Limit`: Maximum requests allowed in the time window
- `X-RateLimit-Remaining`: Requests remaining in the current window
- `X-RateLimit-Reset`: Unix timestamp when the limit resets
## Handling Rate Limits
### 429 Too Many Requests
When you exceed a rate limit, the API returns a `429` status code:
```json
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Try again in 30 seconds.",
"retry_after": 30
}
Best Practices
1. Implement Exponential Backoff
import time
import requests
def make_request_with_retry(url, headers, data, max_retries=3):
for attempt in range(max_retries):
response = requests.post(url, headers=headers, json=data)
if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
wait_time = retry_after * (2 ** attempt) # Exponential backoff
print(f"Rate limited. Waiting {wait_time} seconds...")
time.sleep(wait_time)
continue
return response
raise Exception("Max retries exceeded")
2. Batch Requests
For batch processing, make multiple sync requests with appropriate rate limiting:
import time
# Process images with rate limiting
for image in images:
response = requests.post(sync_endpoint, json={"image_url": image})
# Add delay to respect rate limits (10 requests/minute = 6 seconds between requests)
time.sleep(6)
3. Monitor Usage
Regularly check your usage in the console and set up alerts:
import requests
def check_quota(api_key):
response = requests.get(
"https://console.vfrog.ai/api/quota",
headers={"x-api-key": api_key}
)
data = response.json()
usage_percent = (data['used'] / data['limit']) * 100
if usage_percent > 80:
print(f"Warning: {usage_percent}% of quota used")
4. Respect Rate Limits
The sync endpoint (/v1/cv/requests/sync) has a rate limit of 10 requests per minute. Make sure to implement appropriate delays when processing multiple requests.
Quota Exceeded
When you exceed your monthly quota, requests will fail with a 429 status:
{
"error": "Quota Exceeded",
"message": "Monthly quota of 10,000 requests exceeded",
"quota_reset": "2024-02-01T00:00:00Z"
}
Solutions
1. Wait for Reset
Quotas reset on the 1st of each month. You can wait until then to make more requests.
2. Upgrade Your Plan
Increase your quota by upgrading to a higher plan:
- Go to Billing
- Select a plan with a higher quota
- Complete the upgrade
3. Purchase Additional Quota
Buy additional requests for the current month:
- Go to Billing
- Click Purchase Additional Quota
- Select the number of requests
- Complete the purchase
Enterprise Plans
Need higher limits? Contact our sales team for custom enterprise plans:
- Custom monthly quotas
- Dedicated rate limits
- Priority support
- SLA guarantees
- Volume discounts
📧 Email: hello@vfrog.ai
Next Steps
- Error Handling - Handle rate limit errors gracefully
- Best Practices - Optimize your API usage