| name | adobe-rate-limits |
| description | Implement Adobe API rate limiting, backoff, and quota management across
Firefly, PDF Services, Photoshop, and I/O Events APIs.
Use when handling rate limit errors, implementing retry logic,
or optimizing API request throughput for Adobe.
Trigger with phrases like "adobe rate limit", "adobe throttling",
"adobe 429", "adobe retry", "adobe backoff", "adobe quota".
|
| allowed-tools | Read, Write, Edit |
| version | 1.6.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","design","adobe"] |
| compatibility | Designed for Claude Code |
Adobe Rate Limits
Overview
Handle Adobe API rate limits gracefully with exponential backoff, Retry-After header support, and proactive quota management. Each Adobe API has different rate limits.
Prerequisites
- Adobe SDK installed and authenticated
- Understanding of async/await patterns
- Awareness of your API tier and entitlements
Instructions
Step 1: Know Your Rate Limits by API
| API | Limit | Scope | Response |
|---|
| Firefly API | ~20 req/min (trial), higher on paid | Per api-key | 429 + Retry-After |
| PDF Services | 500 tx/month (free), unlimited (paid) | Per credential | 429 or QUOTA_EXCEEDED |
| Photoshop API | Varies by entitlement | Per api-key | 429 + Retry-After |
| Lightroom API | Varies by entitlement | Per api-key | 429 + Retry-After |
| I/O Events Publishing | 3,000 req/5sec | Per api-key | 429 + Retry-After |
| Analytics 2.0 API | 12 req/6sec per user (~120 req/min) | Per user | 429 + Retry-After |
| IMS Token Endpoint | ~100 req/min | Per client_id | 429 |
Step 2: Implement Retry-After Aware Backoff
import { AdobeApiError } from './client';
export async function withAdobeBackoff<T>(
: <T>,
config = { : , : , : }
): <T> {
( attempt = ; attempt <= config.; attempt++) {
{
();
} (: ) {
(attempt === config.) error;
status = error. || error.?.;
(status && status !== && (status < || status >= )) error;
: ;
(error.) {
delay = error. * ;
} {
exponential = config. * .(, attempt);
jitter = .() * config.;
delay = .(exponential + jitter, config.);
}
.(
+
);
( (r, delay));
}
}
();
}