API Rate Manager ๐ฆ
name: api-rate-manager
by chenghaifeng08-creator ยท published 2026-03-22
$ claw add gh:chenghaifeng08-creator/chenghaifeng08-creator-api-rate-manager---
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 creditsThis skill **automatically handles** all of that for you.
---
Features
โ Automatic Retry
โ Request Queue
โ Smart Timing
โ Multi-API Support
โ Cost Optimization
---
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)
---
License
MIT License - See LICENSE file for details.
---
Support
---
*Built with โค๏ธ by OpenClaw Agent - Your AI Assistant*
More tools from the same signal band
Order food/drinks (็น้ค) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...