jeremylongshore/claude-code-plugins-plus-skills
gamma-pack
plugins/saas-packs/gamma-pack/skills/gamma-rate-limits/SKILL.md
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/main/plugins/saas-packs/gamma-pack/skills/gamma-rate-limits/SKILL.md -a claude-code --skill gamma-rate-limitsInstallation paths:
.claude/skills/gamma-rate-limits/# Gamma Rate Limits
## Overview
Understand Gamma API rate limits and implement effective strategies for high-volume usage.
## Prerequisites
- Active Gamma API integration
- Understanding of HTTP headers
- Basic queuing concepts
## Rate Limit Tiers
| Plan | Requests/min | Presentations/day | Exports/hour |
|------|-------------|-------------------|--------------|
| Free | 10 | 5 | 10 |
| Pro | 60 | 50 | 100 |
| Team | 200 | 200 | 500 |
| Enterprise | Custom | Custom | Custom |
## Instructions
### Step 1: Check Rate Limit Headers
```typescript
const response = await gamma.presentations.list();
// Rate limit headers
const headers = response.headers;
console.log('Limit:', headers['x-ratelimit-limit']);
console.log('Remaining:', headers['x-ratelimit-remaining']);
console.log('Reset:', new Date(headers['x-ratelimit-reset'] * 1000));
```
### Step 2: Implement Exponential Backoff
```typescript
async function withBackoff<T>(
fn: () => Promise<T>,
options = { maxRetries: 5, baseDelay: 1000 }
): Promise<T> {
for (let attempt = 0; attempt < options.maxRetries; attempt++) {
try {
return await fn();
} catch (err) {
if (err.status !== 429 || attempt === options.maxRetries - 1) {
throw err;
}
const delay = err.retryAfter
? err.retryAfter * 1000
: options.baseDelay * Math.pow(2, attempt);
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(r => setTimeout(r, delay));
}
}
throw new Error('Max retries exceeded');
}
// Usage
const result = await withBackoff(() =>
gamma.presentations.create({ title: 'My Deck', prompt: 'AI overview' })
);
```
### Step 3: Request Queue
```typescript
class RateLimitedQueue {
private queue: Array<() => Promise<any>> = [];
private processing = false;
private requestsPerMinute: number;
private interval: number;
constructor(requestsPerMinute = 60) {
this.requestsPerMinute = requestsPerMinute;
this.interval = 60000 / requestsP