Naar inhoud springen

Handleiding voor ontwikkelaars

Tarieflimieten en fouten

De PollsLive API maakt gebruik van snelheidslimieten per sleutel en retourneert consistente JSON-foutobjecten met machineleesbare codes.

Snelheidslimieten

Limieten gelden per API-sleutel (of per OAuth-client) per minuut. Als u de limiet overschrijdt, wordt 429 Too Many Requests geretourneerd.

EindpuntgroepLimietVenster
Alle /api/v1/ eindpunten120 verzoeken1 minuut
POST /api/v1/polls20 verzoeken (bovenop de 120)1 minuut per sleutel
POST /api/v1/media30 verzoeken1 minuut
GET /api/v1/polls/{id}/export?format=pdf10 verzoeken1 uur per werkruimte
POST /api/oauth/token10 verzoeken1 minuut per client_id

Heb je hogere limieten nodig voor je integratie? Neem contact op met ons team.

Voor gelijktijdige open live-sessies geldt een aparte limiet, geen limiet voor het aantal verzoeken: Free 1 kamer, Pro 1 per presentatorlicentie, Premium 2. Als u hierop drukt, wordt 403 geretourneerd met code session_limit. Beëindig een kamer vanaf Studio (of POST /api/v1/sessions/{id}/control met end) voordat je een andere opent.

Kopteksten snelheidslimiet

JSON-antwoorden bevatten headers met metagegevens met snelheidslimiet:

Antwoordheaders
X-RateLimit-Limit: 120
X-RateLimit-Window: 60s

Als u de limiet overschrijdt, wordt 429 geretourneerd met de foutcode rate_limited. Wacht even voordat u het opnieuw probeert. Er is geen Retry-After-header.

Formaat foutreactie

Alle API-fouten retourneren een JSON-body met een genest error-object dat een door een machine leesbare code en een door mensen leesbare message bevat:

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

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

Validatiefouten retourneren 422 met een details-veld in het foutobject:

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

OAuth-tokenfouten volgen in plaats daarvan de indeling RFC 6749 §5.2:

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

Foutcodes

HTTP-statuscodeBetekenis
400invalid_jsonDe hoofdtekst van het verzoek is niet geldig JSON
401missing_authorizationGeen dragertoken opgegeven
401invalid_api_keyOnbekende of onjuiste API-sleutel
401revoked_api_keySleutel is ingetrokken
401expired_api_keySleutel verlopen na rotatie
401invalid_oauth_tokenOAuth-token is ongeldig of verlopen
402upgrade_requiredActie vereist een betaald abonnement (Pro en hoger), of een functie die het plan niet bevat (bijvoorbeeld PDF-export)
403insufficient_scopeInloggegevens missen de reikwijdte die dit eindpunt vereist
403session_limitIn Workspace zijn de gelijktijdige livesessies van het plan al geopend (POST /sessions)
404not_foundBron niet gevonden
409already_votedDeze voterId heeft al op de poll gestemd (POST /votes)
409already_respondedDeze kiezer heeft de dia al beantwoord (POST /responses)
422validation_failedSchema verzoektekst mislukt validatie
429rate_limitedTe veel verzoeken. Probeer het opnieuw nadat het venster opnieuw is ingesteld
500internal_errorOnverwachte serverfout

Nieuwe pogingen en uitstel

We raden een exponentiële back-off met jitter-strategie aan voor productie-integraties:

Opnieuw proberen met back-off (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");
}

Probeer niet opnieuw bij 4xx-fouten (anders dan 429): deze duiden op een probleem met je verzoek dat niet wordt opgelost door het opnieuw te proberen.

OAuth foutformaat

Het tokeneindpunt (POST /api/oauth/token) retourneert fouten in RFC 6749-indeling:

foutBetekenis
invalid_requestOntbrekende of onjuist opgemaakte parameters
invalid_clientOnbekende client_id of verkeerd client_geheim
access_deniedClient is ingetrokken, heeft een snelheidsbeperking (429) of de werkruimte bevindt zich op de Free-abonnement (402)
unsupported_grant_typeAlleen client_credentials wordt ondersteund

Nog vragen?

Ons team helpt je graag verder.

Neem contact op

We gebruiken essentiële cookies om je ingelogd te houden en dubbele stemmen te voorkomen. Met je toestemming gebruiken we ook Cloudflare Web Analytics om paginaweergaven te tellen en de Whop Pixel om te zien welke bezoeken tot een aankoop leiden. Cookie Policy