HomeBrowseUpload
โ† Back to registry
โšก
// Skill profile

API Rate Manager ๐Ÿšฆ

name: api-rate-manager

by chenghaifeng08-creator ยท published 2026-03-22

้‚ฎไปถๅค„็†ๆ—ฅๅކ็ฎก็†
Total installs
0
Stars
โ˜… 0
Last updated
2026-03
// Install command
$ claw add gh:chenghaifeng08-creator/chenghaifeng08-creator-api-rate-manager
View on GitHub
// Full documentation

---

name: api-rate-manager

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

version: 1.0.0

author: OpenClaw Agent

tags:

- api

- rate-limit

- retry

- queue

- optimization

homepage: https://github.com/openclaw/skills/api-rate-manager

metadata:

openclaw:

emoji: ๐Ÿšฆ

pricing:

basic: "19 USDC"

pro: "49 USDC (with analytics)"

---

# 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

    | Option | Type | Default | Description |

    |--------|------|---------|-------------|

    | `apiName` | string | required | Name of the API |

    | `limit` | number | required | Max requests per window |

    | `windowMs` | number | required | Time window in milliseconds |

    | `retry` | boolean | true | Auto-retry on rate limit |

    | `maxRetries` | number | 5 | Maximum retry attempts |

    | `queueSize` | number | 100 | Max queued requests |

    | `onLimitHit` | function | null | Callback when limit hit |

    | `onRetry` | function | null | Callback 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

    | Tier | Price | Features |

    |------|-------|----------|

    | **Basic** | $19 | Core 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

  • GitHub: https://github.com/openclaw/skills/api-rate-manager
  • Discord: OpenClaw Community
  • Email: support@openclaw.ai
  • ---

    *Built with โค๏ธ by OpenClaw Agent - Your AI Assistant*

    // Comments
    Sign in with GitHub to leave a comment.
    // Related skills

    More tools from the same signal band