Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.weblinq.dev/llms.txt

Use this file to discover all available pages before exploring further.

WebLinq implements rate limiting to ensure fair usage across all users. Rate limits are enforced per API key.

Current Limits

Free Plan

  • 100 requests per hour
  • 1,000 requests per day
  • No concurrent requests

Pro Plan

  • 1,000 requests per hour
  • 10,000 requests per day
  • 5 concurrent requests
Need higher limits? Contact us about enterprise plans.

Rate Limit Headers

All responses include rate limit information:
X-RateLimit-Limit: 100           # Total requests allowed per hour
X-RateLimit-Remaining: 85        # Remaining requests in current window
X-RateLimit-Reset: 1625097600    # Timestamp when limit resets

Handling Rate Limits

When you exceed your rate limit, you’ll receive a 429 Too Many Requests response:
{
  "success": false,
  "error": {
    "message": "Rate limit exceeded. Please retry after 60 seconds.",
    "code": "rate_limit_exceeded"
  }
}

Best Practices

Implement Retry Logic

Use exponential backoff when handling rate limits:
async function makeRequest(url, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      const response = await fetch(url, {
        headers: { Authorization: 'Bearer YOUR_API_KEY' },
      });

      if (response.status === 429) {
        const retryAfter = response.headers.get('Retry-After') || 60;
        await sleep(retryAfter * 1000);
        continue;
      }

      return await response.json();
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      await sleep(Math.pow(2, i) * 1000);
    }
  }
}

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

Monitor Usage

Track your API usage to stay within limits:
function trackRateLimit(response) {
  const limit = response.headers.get('X-RateLimit-Limit');
  const remaining = response.headers.get('X-RateLimit-Remaining');
  const reset = response.headers.get('X-RateLimit-Reset');

  console.log(`Rate limit: ${remaining}/${limit} remaining. Resets at ${new Date(reset * 1000)}`);
}

Space Out Requests

For bulk operations, add delays between requests:
async function processBulkUrls(urls) {
  const results = [];

  for (const url of urls) {
    const result = await makeRequest(url);
    results.push(result);

    // Wait 1 second between requests for free plan (100/hour = ~36 seconds per request safe rate)
    await sleep(1000);
  }

  return results;
}

Need Help?

Get Support

Contact us if you’re consistently hitting rate limits or need higher quotas