Zum Inhalt springen

Entwickler-Leitfaden

Ratenlimits & Fehler

Die PollsLive-API arbeitet mit Ratenlimits pro Schlüssel und liefert einheitliche JSON-Fehlerobjekte mit maschinenlesbaren Codes.

Ratenlimits

Die Limits gelten pro API-Schlüssel (oder pro OAuth-Client) und Minute. Wird das Limit überschritten, folgt 429 Too Many Requests.

EndpunktgruppeLimitZeitfenster
Alle /api/v1/-Endpunkte120 Anfragen1 Minute
POST /api/v1/polls20 Anfragen (zusätzlich zu den 120)1 Minute pro Schlüssel
POST /api/v1/media30 Anfragen1 Minute
GET /api/v1/polls/{id}/export?format=pdf10 Anfragen1 Stunde pro Workspace
POST /api/oauth/token10 Anfragen1 Minute pro client_id

Brauchst du höhere Limits für deine Integration? Wende dich an unser Team.

Gleichzeitig offene Live-Sitzungen sind eine eigene Obergrenze, kein Ratenlimit: Free 1 Raum, Pro 1 pro Präsentator-Lizenz, Premium 2. Wird sie erreicht, folgt 403 mit dem Code session_limit. Beende einen Raum in Studio (oder per POST /api/v1/sessions/{id}/control mit end), bevor du einen weiteren öffnest.

Ratenlimit-Header

JSON-Antworten führen Metadaten-Header zum Ratenlimit mit:

Antwort-Header
X-RateLimit-Limit: 120
X-RateLimit-Window: 60s

Ein überschrittenes Limit liefert 429 mit dem Fehlercode rate_limited. Warte, bevor du es erneut versuchst. Einen Retry-After-Header gibt es nicht.

Format der Fehlerantwort

Alle API-Fehler liefern einen JSON-Body mit einem verschachtelten error-Objekt, das einen maschinenlesbaren code und eine lesbare message enthält:

Standardfehler
HTTP/1.1 404 Not Found
Content-Type: application/json

{
  "error": {
    "code": "not_found",
    "message": "Poll not found."
  }
}

Validierungsfehler liefern 422 mit einem Feld details im Fehlerobjekt:

Validierungsfehler
{
  "error": {
    "code": "validation_failed",
    "message": "Request validation failed.",
    "details": {
      "fieldErrors": { "title": ["String must contain at least 1 character(s)"] },
      "formErrors": []
    }
  }
}

OAuth-Token-Fehler folgen stattdessen dem Format RFC 6749 §5.2:

OAuth-Fehler
{
  "error": "invalid_client",
  "error_description": "Invalid client credentials."
}

Fehlercodes

HTTP-StatusCodeBedeutung
400invalid_jsonDer Request-Body ist kein gültiges JSON
401missing_authorizationKein Bearer-Token übergeben
401invalid_api_keyUnbekannter oder falscher API-Schlüssel
401revoked_api_keyDer Schlüssel wurde widerrufen
401expired_api_keyDer Schlüssel ist nach der Rotation abgelaufen
401invalid_oauth_tokenOAuth-Token ungültig oder abgelaufen
402upgrade_requiredDie Aktion erfordert einen kostenpflichtigen Tarif (Pro und höher) oder eine Funktion, die der Tarif nicht enthält (z. B. PDF-Export)
403insufficient_scopeDer Zugangsdatei fehlt der Scope, den dieser Endpunkt verlangt
403session_limitDer Workspace hat bereits so viele Live-Sitzungen offen, wie sein Tarif erlaubt (POST /sessions)
404not_foundRessource nicht gefunden
409already_votedDiese voterId hat bereits an der Umfrage abgestimmt (POST /votes)
409already_respondedDiese Person hat die Folie bereits beantwortet (POST /responses)
422validation_failedDer Request-Body hat die Schemavalidierung nicht bestanden
429rate_limitedZu viele Anfragen. Nach dem Zurücksetzen des Fensters erneut versuchen
500internal_errorUnerwarteter Serverfehler

Wiederholungen & Backoff

Für Produktionsintegrationen empfehlen wir exponentielles Backoff mit Jitter:

Wiederholung mit Backoff (JavaScript)
async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const res = await fetch(url, options);

    if (res.status === 429) {
      // PollsLive does not send Retry-After, so back off exponentially
      // (capped at one minute, the length of a rate-limit window).
      const backoff = Math.min(1000 * 2 ** attempt + Math.random() * 500, 60000);
      await new Promise((r) => setTimeout(r, backoff));
      continue;
    }
    if (res.status >= 500 && attempt < maxRetries) {
      const backoff = Math.min(1000 * 2 ** attempt + Math.random() * 500, 30000);
      await new Promise((r) => setTimeout(r, backoff));
      continue;
    }
    return res;
  }
  throw new Error("Max retries exceeded");
}

Wiederhole nicht bei 4xx-Fehlern (außer 429). Sie weisen auf ein Problem in deiner Anfrage hin, das sich durch Wiederholen nicht löst.

OAuth-Fehlerformat

Der Token-Endpunkt (POST /api/oauth/token) liefert Fehler im RFC-6749-Format:

FehlerBedeutung
invalid_requestFehlende oder fehlerhafte Parameter
invalid_clientUnbekannte client_id oder falsches client_secret
access_deniedClient widerrufen, ratenbegrenzt (429), oder der Workspace ist im Free-Tarif (402)
unsupported_grant_typeNur client_credentials wird unterstützt

Hast du noch Fragen?

Unser Team hilft dir gerne weiter.

Kontaktiere uns

Notwendige Cookies halten Sie angemeldet und verhindern doppelte Stimmen. Mit Ihrer Erlaubnis nutzen wir außerdem Cloudflare Web Analytics, um Seitenaufrufe zu zählen, und das Whop Pixel, um zu sehen, welche Besuche zu einem Kauf führen. Cookie-Richtlinie