Rate Limits
Die CODEFLUSS API verwendet Rate Limiting, um faire Nutzung sicherzustellen und die Plattformstabilität zu gewährleisten. Die Limits variieren je nach Abonnement-Plan.
Limit-Übersicht nach Plan
| Plan | Anfragen/Minute | Anfragen/Stunde | Anfragen/Tag |
|---|---|---|---|
| Free | 60 | 1.000 | 10.000 |
| Starter | 120 | 5.000 | 50.000 |
| Professional | 300 | 15.000 | 150.000 |
| Enterprise | 1.000 | 50.000 | Unbegrenzt |
Rate Limit Headers
Jede API-Response enthält Header mit Informationen zum aktuellen Rate Limit Status:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1706054400| Header | Beschreibung |
|---|---|
X-RateLimit-Limit | Maximale Anfragen im aktuellen Zeitfenster |
X-RateLimit-Remaining | Verbleibende Anfragen im aktuellen Zeitfenster |
X-RateLimit-Reset | Unix-Timestamp, wann das Limit zurückgesetzt wird |
Rate Limit überschritten
Wenn Sie das Rate Limit überschreiten, erhalten Sie einen 429 Too Many Requests Status:
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after 45 seconds.",
"details": {
"retryAfter": 45,
"limit": 60,
"windowSeconds": 60
}
}
}Retry-After Header
HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1706054445Best Practices
Exponential Backoff implementieren
Bei Rate Limit Fehlern empfehlen wir exponentielles Backoff:
async function fetchWithRetry(
url: string,
options: RequestInit,
maxRetries = 3
): Promise<Response> {
let lastError: Error | null = null;
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = parseInt(
response.headers.get("Retry-After") || "60"
);
const backoff = Math.min(retryAfter * 1000, 60000);
console.log(`Rate limited. Retrying in ${backoff}ms...`);
await new Promise(resolve => setTimeout(resolve, backoff));
continue;
}
return response;
} catch (error) {
lastError = error as Error;
const backoff = Math.pow(2, attempt) * 1000;
await new Promise(resolve => setTimeout(resolve, backoff));
}
}
throw lastError || new Error("Max retries exceeded");
}Anfragen bündeln
Statt vieler einzelner Anfragen, nutzen Sie Batch-Endpunkte wo verfügbar:
// ❌ Schlecht: Viele einzelne Anfragen
for (const id of mediaIds) {
await fetch(`/api/v1/media/${id}`, { method: "DELETE" });
}
// ✅ Gut: Eine Batch-Anfrage
await fetch("/api/v1/media/batch", {
method: "DELETE",
body: JSON.stringify({ ids: mediaIds }),
});Rate Limit Status überwachen
Überwachen Sie proaktiv Ihre verbleibenden Anfragen:
async function makeApiRequest(url: string, options: RequestInit) {
const response = await fetch(url, options);
const remaining = parseInt(
response.headers.get("X-RateLimit-Remaining") || "0"
);
if (remaining < 10) {
console.warn(`Low rate limit: ${remaining} requests remaining`);
}
return response;
}Spezielle Limits
Einige Endpunkte haben zusätzliche spezifische Limits:
| Endpunkt | Limit | Fenster |
|---|---|---|
POST /api/v1/ai/* | 10 | Pro Minute |
POST /api/v1/media | 50 | Pro Stunde |
POST /api/v1/contact | 5 | Pro Stunde |
Rate Limit erhöhen
Für höhere Limits haben Sie folgende Optionen:
- Plan upgraden – Höhere Pläne bieten mehr Anfragen
- Enterprise kontaktieren – Für individuelle Limits
- Caching implementieren – Reduzieren Sie wiederholte Anfragen
Nächste Schritte
- Fehlerbehandlung – Alle Fehlercodes verstehen
- Authentifizierung – API-Key Setup