Ratenlimits
Planen Sie anhand der exakten Limits pro Schlüssel und Tarif, der Antwort-Header und eines sicheren Wiederholungsverhaltens.
Planen Sie anhand der exakten Limits pro Schlüssel und Tarif, der Antwort-Header und eines sicheren Wiederholungsverhaltens.
Die öffentliche API wendet auf jeden API-Schlüssel und jedes OAuth-Zugriffstoken ein gleitendes Anfragekontingent von einer Minute an. Das Erstellen weiterer Schlüssel, um ein Limit zu umgehen, wird nicht unterstützt und kann zu Einschränkungen von Zugangsdaten oder Konten führen.
Tariflimits#
| Aktiver Tarif | Anfragen pro Schlüssel und Minute |
|---|---|
| Launch | 120 |
| Operate | 600 |
| Scale | 1.800 |
Zugangsdaten, deren Konto keinen aktiven kostenpflichtigen Tarif hat, erhalten 403 subscription_required, bevor Ratenlimit-Kapazität zugewiesen wird. Make Agent Fast kann für ungewöhnlich aufwendige Vorgänge niedrigere endpunktspezifische Limits einführen; in diesem Fall werden sie in der Endpunkt-Referenz ausdrücklich genannt.
Eine Antwort bei überschrittenem Ratenlimit#
Ist das Kontingent erschöpft, gibt die API 429 rate_limit_exceeded zurück, und zwar mit:
HTTP/1.1 429 Too Many Requests
Retry-After: 17
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-Request-Id: 6c0b2f2e-...
Content-Type: application/jsonRetry-After gibt die Mindestanzahl an Sekunden an, die Sie warten müssen. Jede authentifizierte
Antwort enthält außerdem X-RateLimit-Limit, X-RateLimit-Remaining und
X-RateLimit-Reset (ein Unix-Zeitstempel), sodass Anwendungen ihre Anfragen drosseln können, bevor ein
429 auftritt.
Wiederholungslogik implementieren#
Verwenden Sie exponentielles Backoff mit zufälligem Jitter, berücksichtigen Sie einen größeren Retry-After-Wert und begrenzen Sie die Gesamtzahl der Versuche.
async function requestWithRetry(url: string, init: RequestInit, attempts = 4) {
for (let attempt = 0; attempt < attempts; attempt += 1) {
const response = await fetch(url, init);
if (response.status !== 429 && response.status < 500) return response;
if (attempt === attempts - 1) return response;
const retryAfter = Number(response.headers.get("retry-after") ?? 0) * 1_000;
const exponential = 500 * 2 ** attempt;
const jitter = Math.random() * 250;
await new Promise((resolve) =>
setTimeout(resolve, Math.max(retryAfter, exponential + jitter)),
);
}
throw new Error("unreachable");
}Verwenden Sie bei POST, PATCH und DELETE bei jeder Wiederholung nach einem Netzwerk- oder Serverfehler denselben gültigen Idempotency-Key. Ein neuer Idempotency-Key kann dazu führen, dass ein bereits abgeschlossener Seiteneffekt erneut ausgeführt wird.
Anfragevolumen reduzieren#
- Cachen Sie Lesezugriffe auf Konto-, Website- und Konfigurationsdaten, die nicht in Echtzeit aktuell sein müssen.
- Fordern Sie bis zu
100Datensätze pro Seite an, statt wiederholt sehr kleine Seiten abzurufen. - Verarbeiten Sie Webhook-Ereignisse, statt Conversations, Leads oder Broadcasts per Polling abzufragen.
- Begrenzen Sie die Worker-Parallelität pro API-Schlüssel; ein Burst aus vielen Serverless-Aufrufen teilt sich dasselbe Kontingent.
- Verwenden Sie separate Schlüssel für separate Dienste, um Isolation und Nachvollziehbarkeit zu erreichen – nicht, um die Kapazität einer einzelnen Workload zu vervielfachen.
Tabelle: Wiederholen oder nicht wiederholen#
| Antwort | Wiederholen? | Bedingung |
|---|---|---|
429 | Ja | Warten Sie auf Retry-After, fügen Sie Jitter hinzu und begrenzen Sie die Versuche |
500 | Manchmal | Sichere Lesezugriffe oder Änderungen, die durch denselben Idempotency-Key geschützt sind |
409 (Verarbeitungskonflikt) | Ja | Warten Sie auf den Header Retry-After: 2 und behalten Sie denselben Idempotency-Key bei |
Sonstige 409 | Nicht sofort | Lesen Sie den aktuellen Zustand der Ressource und lösen Sie den Konflikt auf |
503 outcome_unknown | Nein | Die Änderung wurde möglicherweise abgeschlossen; prüfen Sie die Ressource, bevor Sie einen neuen Idempotency-Key verwenden |
400, 401, 403, 404, 415 | Nein | Korrigieren Sie zuerst Eingabe, Zugangsdaten, Berechtigung, Pfad oder Inhaltstyp |
Wenn eine dauerhafte Workload ihr Tarifkontingent berechtigterweise überschreitet, reduzieren Sie das Polling, bündeln Sie Aufgaben oder wenden Sie sich mit repräsentativen Anfrage-IDs und dem erwarteten Datenverkehr an den Support, anstatt eine unbegrenzte Wiederholungsschleife einzubauen.