TravelyzerTravelyzerDocs

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

PlanRequests/minuteRequests/monthPrice
Free3010,000Free
Pay as you go120Unlimited$0.50/1000 req
Starter18050,000 included$29/month
Growth600500,000 included$199/month
EnterpriseCustomCustomCustom

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:

HeaderDescriptionExample
X-RateLimit-LimitRequest limit per minute60
X-RateLimit-RemainingRemaining requests in the window58
X-RateLimit-ResetUnix timestamp for reset1705507200

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

EndpointCost
GET /v1/geocoding/forward1 request
GET /v1/geocoding/reverse1 request
GET /v1/geocoding/autocomplete1 request
POST /v1/geocoding/batchN requests (1 per query)

Batch Geocoding: A batch call with 50 queries counts as 50 requests against your quota.

Free Requests (not counted)

EndpointCost
GET /health0
GET /sla-metrics0
GET /sla-history0
GET /coverage0

Requests with Errors

Error TypeCounted?
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 1

2. 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"
done

Use 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

TypeReset
Rate limit (per minute)Rolling 60-second window
Monthly quota1st of the month at 00:00 UTC

Increasing Your Limits

Upgrade Your Plan

  1. Log in to the Dashboard
  2. Go to Billing
  3. Select the desired plan
  4. Complete payment
  5. 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

FeatureFreePay as you goStarterGrowthEnterprise
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