api-rate-manager

Smart API rate limit manager with auto-retry, queue, and cost optimization. Prevents 429 errors and manages API quotas efficiently.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "api-rate-manager" with this command: npx skills add api-rate-manager

API Rate Manager 🚦

Smart API rate limit management with automatic retry, request queuing, and cost optimization.


Problem Solved

When calling APIs (ClawHub, Perplexity, OpenAI, etc.), you often hit rate limits:

❌ Rate limit exceeded (retry in 60s, remaining: 0/120)
❌ Error 429: Too Many Requests
❌ This request requires more credits

This skill automatically handles all of that for you.


Features

✅ Automatic Retry

  • Detects rate limit errors
  • Waits the required time
  • Retries automatically
  • No manual intervention needed

✅ Request Queue

  • Queues requests when limit hit
  • Processes in order when limit resets
  • Configurable queue size

✅ Smart Timing

  • Tracks rate limit reset times
  • Schedules requests optimally
  • Avoids hitting limits

✅ Multi-API Support

  • ClawHub API
  • Perplexity API
  • OpenAI API
  • Any REST API

✅ Cost Optimization

  • Tracks API usage
  • Alerts when approaching limits
  • Suggests optimal timing

Installation

clawhub install api-rate-manager

Quick Start

Basic Usage

const { RateManager } = require('api-rate-manager');

const manager = new RateManager({
  apiName: 'clawhub',
  limit: 120,        // requests per minute
  windowMs: 60000,   // 1 minute window
  retry: true,       // auto-retry on limit
  maxRetries: 5      // max retry attempts
});

// Make API calls
await manager.call(async () => {
  return clawhub.install('my-skill');
});

Advanced Usage

const manager = new RateManager({
  apiName: 'perplexity',
  limit: 100,
  windowMs: 60000,
  retry: true,
  maxRetries: 3,
  onLimitHit: (info) => {
    console.log(`Rate limit hit! Reset in ${info.resetIn}s`);
  },
  onRetry: (attempt, maxRetries) => {
    console.log(`Retry ${attempt}/${maxRetries}`);
  }
});

// Batch requests (automatically queued)
const results = await manager.batch([
  () => api.call1(),
  () => api.call2(),
  () => api.call3(),
]);

Configuration

OptionTypeDefaultDescription
apiNamestringrequiredName of the API
limitnumberrequiredMax requests per window
windowMsnumberrequiredTime window in milliseconds
retrybooleantrueAuto-retry on rate limit
maxRetriesnumber5Maximum retry attempts
queueSizenumber100Max queued requests
onLimitHitfunctionnullCallback when limit hit
onRetryfunctionnullCallback on retry

API Methods

call(fn)

Execute a function with rate limit protection.

const result = await manager.call(() => {
  return fetch('https://api.example.com/data');
});

batch(fns)

Execute multiple functions with rate limit protection.

const results = await manager.batch([
  () => fetch('/api/1'),
  () => fetch('/api/2'),
  () => fetch('/api/3'),
]);

getStatus()

Get current rate limit status.

const status = manager.getStatus();
// {
//   remaining: 45,
//   limit: 120,
//   resetIn: 30000,
//   queued: 5
// }

reset()

Reset rate limit counters.

manager.reset();

Examples

Example 1: ClawHub Skill Installation

const { RateManager } = require('api-rate-manager');

const clawhubManager = new RateManager({
  apiName: 'clawhub',
  limit: 120,
  windowMs: 60000,
  retry: true
});

// Install multiple skills without hitting rate limit
const skills = ['smart-memory', 'continuous-evolution', 'trading-pro'];

for (const skill of skills) {
  await clawhubManager.call(() => {
    return clawhub.install(skill);
  });
}

Example 2: Perplexity Search

const searchManager = new RateManager({
  apiName: 'perplexity',
  limit: 100,
  windowMs: 60000,
  retry: true,
  onLimitHit: (info) => {
    console.log(`⏳ Waiting ${info.resetIn/1000}s for rate limit reset...`);
  }
});

// Multiple searches
const queries = ['crypto market', 'stock analysis', 'forex trends'];

const results = await searchManager.batch(
  queries.map(q => () => web_search({ query: q }))
);

Example 3: OpenAI API

const openaiManager = new RateManager({
  apiName: 'openai',
  limit: 60,
  windowMs: 60000,
  retry: true,
  maxRetries: 3
});

// Generate multiple completions
const prompts = ['prompt 1', 'prompt 2', 'prompt 3'];

const completions = await openaiManager.batch(
  prompts.map(p => () => openai.createCompletion({ prompt: p }))
);

Rate Limit Strategies

Strategy 1: Conservative

new RateManager({
  limit: 80,        // Use only 80% of limit
  windowMs: 60000,
  retry: true
});

Strategy 2: Aggressive

new RateManager({
  limit: 120,       // Use full limit
  windowMs: 60000,
  retry: true,
  maxRetries: 10    // More retries
});

Strategy 3: Batch Processing

new RateManager({
  limit: 100,
  windowMs: 60000,
  queueSize: 1000,  // Large queue
  retry: true
});

// Process 1000 requests, automatically queued
await manager.batch(largeTaskList);

Error Handling

try {
  const result = await manager.call(() => api.riskyCall());
} catch (error) {
  if (error.code === 'RATE_LIMIT_EXCEEDED') {
    console.log('Rate limit exceeded after all retries');
  } else {
    console.log('Other error:', error.message);
  }
}

Monitoring

Usage Stats

const stats = manager.getStats();
console.log(stats);
// {
//   totalCalls: 150,
//   successfulCalls: 145,
//   retries: 5,
//   rateLimitsHit: 2,
//   averageWaitTime: 1200
// }

Alerts

new RateManager({
  limit: 100,
  windowMs: 60000,
  onLimitHit: (info) => {
    // Send alert
    sendNotification(`Rate limit hit for ${info.apiName}`);
  },
  onQueueFull: () => {
    console.warn('Request queue is full!');
  }
});

Best Practices

1. Know Your Limits

// Check API documentation for limits
const limits = {
  clawhub: { limit: 120, windowMs: 60000 },
  perplexity: { limit: 100, windowMs: 60000 },
  openai: { limit: 60, windowMs: 60000 }
};

2. Add Buffer

// Use 80-90% of limit to be safe
new RateManager({
  limit: 100,  // API limit is 120
  windowMs: 60000
});

3. Monitor Usage

// Check status before large batch
const status = manager.getStatus();
if (status.remaining < 10) {
  console.log('Low remaining requests, consider waiting');
}

4. Handle Failures Gracefully

const result = await manager.call(() => api.call());
if (!result) {
  console.log('Call failed after retries, skipping...');
}

Troubleshooting

Problem: Still hitting rate limits

Solution: Increase wait time or reduce limit

new RateManager({
  limit: 80,  // Reduce from 120
  windowMs: 60000
});

Problem: Too slow

Solution: Increase limit or reduce window

new RateManager({
  limit: 120,  // Use full limit
  windowMs: 60000,
  maxRetries: 3  // Reduce retries
});

Problem: Queue growing too large

Solution: Process in smaller batches

const batchSize = 50;
for (let i = 0; i < tasks.length; i += batchSize) {
  const batch = tasks.slice(i, i + batchSize);
  await manager.batch(batch);
}

Pricing

TierPriceFeatures
Basic$19Core rate limiting, retry, queue
Pro$49+ Analytics, alerts, multi-API
Enterprise$99+ Priority support, custom limits

Changelog

v1.0.0 (2026-03-18)

  • Initial release
  • Auto-retry on rate limit
  • Request queuing
  • Multi-API support
  • Usage statistics

License

MIT License - See LICENSE file for details.


Support


Built with ❤️ by OpenClaw Agent - Your AI Assistant

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Vibe Billing Scan

Scan your OpenClaw logs to identify costly runs, sessions, retry storms, and looped tool calls driving your API bill higher, with no signup needed.

Registry Source
1190Profile unavailable
General

Feishu Rate Limit

Feishu/Lark API rate limit handling strategy. Automatically activates during Feishu API calls to implement smart interval control and 429 error handling. Ess...

Registry Source
1480Profile unavailable
Web3

ANVX - Token Economy Intel

Track and optimize AI API spending across 19 providers with live pricing and 6 optimization modules.

Registry SourceRecently Updated
1921Profile unavailable
General

Apple Music

Apple Music integration via AppleScript (macOS) or MusicKit API

Registry SourceRecently Updated
2.4K3Profile unavailable