Rate Limits
Understanding usage limits and quotas for Travelyzer Places API.
Rate Limits
Travelyzer Places API applies request limits to ensure optimal service quality for all users. This guide explains how these limits work and how to manage them.
Limits by Plan
| Plan | Requests/minute | Requests/month | Price |
|---|---|---|---|
| Free | 30 | 10,000 | Free |
| Pay as you go | 120 | Unlimited | $0.50/1000 req |
| Starter | 180 | 50,000 included | $29/month |
| Growth | 600 | 500,000 included | $199/month |
| Enterprise | Custom | Custom | Custom |
Starter and Growth plans include a monthly quota. Beyond that, additional requests are billed at discounted rates.
Response Headers
Each API response includes headers indicating your usage:
| Header | Description | Example |
|---|---|---|
X-RateLimit-Limit | Request limit per minute | 60 |
X-RateLimit-Remaining | Remaining requests in the window | 58 |
X-RateLimit-Reset | Unix timestamp for reset | 1705507200 |
Check Your Limits
curl -v "https://places.gotravelyzer.com/v1/geocoding/forward?query=Paris" \
-H "Authorization: Bearer YOUR_TOKEN" 2>&1 | grep -i "x-ratelimit"Example output:
< X-RateLimit-Limit: 60
< X-RateLimit-Remaining: 58
< X-RateLimit-Reset: 1705507200
Exceeding Limits
Rate Limit (requests/minute)
When you exceed the per-minute limit, you receive a 429 error:
curl "https://places.gotravelyzer.com/v1/geocoding/forward?query=Paris" \
-H "Authorization: Bearer YOUR_TOKEN"Response:
HTTP/1.1 429 Too Many Requests
Retry-After: 45
Content-Type: application/json{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please retry after 45 seconds.",
"retryAfter": 45
}Action: Wait the number of seconds indicated in retryAfter or the Retry-After header, then retry.
Monthly Quota Exceeded
When you exceed your monthly quota (plans with included quota):
{
"statusCode": 403,
"error": "Forbidden",
"message": "Monthly quota exceeded",
"quotaType": "monthly",
"resetAt": "2026-03-01T00:00:00Z"
}Possible actions:
- Wait for the beginning of the next month
- Upgrade to a higher plan
- Switch to Pay as you go for unlimited usage
Request Counting
Billed Requests
| Endpoint | Cost |
|---|---|
GET /v1/geocoding/forward | 1 request |
GET /v1/geocoding/reverse | 1 request |
GET /v1/geocoding/autocomplete | 1 request |
POST /v1/geocoding/batch | N requests (1 per query) |
Batch Geocoding: A batch call with 50 queries counts as 50 requests against your quota.
Free Requests (not counted)
| Endpoint | Cost |
|---|---|
GET /health | 0 |
GET /sla-metrics | 0 |
GET /sla-history | 0 |
GET /coverage | 0 |
Requests with Errors
| Error Type | Counted? |
|---|---|
| 4xx errors (client) | Yes |
| 5xx errors (server) | No |
Best Practices
1. Implement Retry with Backoff
When you receive a 429 error, wait before retrying:
#!/bin/bash
TOKEN="your_token"
QUERY="Paris"
MAX_RETRIES=3
RETRY_DELAY=1
for i in $(seq 1 $MAX_RETRIES); do
RESPONSE=$(curl -s -w "\n%{http_code}" \
"https://places.gotravelyzer.com/v1/geocoding/forward?query=$QUERY" \
-H "Authorization: Bearer $TOKEN")
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
if [ "$HTTP_CODE" -eq 200 ]; then
echo "$RESPONSE" | head -n -1
exit 0
elif [ "$HTTP_CODE" -eq 429 ]; then
echo "Rate limited. Waiting ${RETRY_DELAY}s..." >&2
sleep $RETRY_DELAY
RETRY_DELAY=$((RETRY_DELAY * 2)) # Exponential backoff
else
echo "Error: HTTP $HTTP_CODE" >&2
exit 1
fi
done
echo "Max retries exceeded" >&2
exit 12. Cache Results
Geocoding results rarely change. Implement client-side caching:
- Cities and countries: Long-term cache (24h - 7 days)
- Precise addresses: Medium-term cache (1h - 24h)
- Autocomplete: Short-term cache (5 min - 1h)
3. Use Batch for High Volumes
Instead of making 100 separate requests:
# Inefficient: 100 API calls, 100 connections
for city in Paris London Tokyo ...; do
curl "https://places.gotravelyzer.com/v1/geocoding/forward?query=$city" \
-H "Authorization: Bearer $TOKEN"
doneUse the batch endpoint:
# Efficient: 1 API call, 100 results
curl -X POST "https://places.gotravelyzer.com/v1/geocoding/batch" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"queries": ["Paris", "London", "Tokyo", "..."]
}'4. Implement Debounce for Autocomplete
Don't make a request on every keystroke. Wait until the user stops typing:
- Recommended delay: 250-300ms after the last keystroke
- Minimum length: 2-3 characters before requesting
5. Monitor Your Quotas
Regularly check your response headers and set up alerts in the Dashboard.
# Extract quota information
curl -s -D - "https://places.gotravelyzer.com/v1/geocoding/forward?query=test" \
-H "Authorization: Bearer $TOKEN" \
-o /dev/null | grep -E "X-RateLimit|X-Quota"Billing Periods
| Type | Reset |
|---|---|
| Rate limit (per minute) | Rolling 60-second window |
| Monthly quota | 1st of the month at 00:00 UTC |
Increasing Your Limits
Upgrade Your Plan
- Log in to the Dashboard
- Go to Billing
- Select the desired plan
- Complete payment
- New limits are effective immediately
Enterprise Plan
For needs beyond the Growth plan:
- Custom request limits
- Guaranteed SLA with penalties
- Dedicated priority support
- Custom billing
- Assisted technical integration
Contact us: contact@gotravelyzer.com
Plan Comparison
| Feature | Free | Pay as you go | Starter | Growth | Enterprise |
|---|---|---|---|---|---|
| Forward Geocoding | ✓ | ✓ | ✓ | ✓ | ✓ |
| Reverse Geocoding | ✓ | ✓ | ✓ | ✓ | ✓ |
| Autocomplete | ✓ | ✓ | ✓ | ✓ | ✓ |
| Batch (max 100) | ✓ | ✓ | ✓ | ✓ | ✓ |
| SLA Metrics | ✓ | ✓ | ✓ | ✓ | ✓ |
| Email support | - | ✓ | ✓ | ✓ | ✓ |
| Priority support | - | - | - | ✓ | ✓ |
| Guaranteed SLA | - | - | - | 99.9% | 99.99% |
Dashboard Monitoring
The Developer Dashboard allows you to:
- Visualize your consumption in real-time
- Configure quota alerts (80%, 90%, 100%)
- Analyze your usage patterns by endpoint
- Export usage reports in CSV