Back to Skills

gamma-rate-limits

verified
View on GitHub

Marketplace

claude-code-plugins-plus

jeremylongshore/claude-code-plugins-plus-skills

Plugin

gamma-pack

productivity

Repository

jeremylongshore/claude-code-plugins-plus-skills
1.1kstars

plugins/saas-packs/gamma-pack/skills/gamma-rate-limits/SKILL.md

Last Verified

January 22, 2026

Install Skill

Select agents to install to:

Scope:
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-limits

Installation paths:

Claude
.claude/skills/gamma-rate-limits/
Powered by add-skill CLI

Instructions

# 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

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
3856 chars