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.
| Eindpuntgroep | Limiet | Venster |
|---|---|---|
Alle /api/v1/ eindpunten | 120 verzoeken | 1 minuut |
POST /api/v1/polls | 20 verzoeken (bovenop de 120) | 1 minuut per sleutel |
POST /api/v1/media | 30 verzoeken | 1 minuut |
GET /api/v1/polls/{id}/export?format=pdf | 10 verzoeken | 1 uur per werkruimte |
POST /api/oauth/token | 10 verzoeken | 1 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:
X-RateLimit-Limit: 120
X-RateLimit-Window: 60sAls 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:
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:
{
"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:
{
"error": "invalid_client",
"error_description": "Invalid client credentials."
}Foutcodes
| HTTP-status | code | Betekenis |
|---|---|---|
| 400 | invalid_json | De hoofdtekst van het verzoek is niet geldig JSON |
| 401 | missing_authorization | Geen dragertoken opgegeven |
| 401 | invalid_api_key | Onbekende of onjuiste API-sleutel |
| 401 | revoked_api_key | Sleutel is ingetrokken |
| 401 | expired_api_key | Sleutel verlopen na rotatie |
| 401 | invalid_oauth_token | OAuth-token is ongeldig of verlopen |
| 402 | upgrade_required | Actie vereist een betaald abonnement (Pro en hoger), of een functie die het plan niet bevat (bijvoorbeeld PDF-export) |
| 403 | insufficient_scope | Inloggegevens missen de reikwijdte die dit eindpunt vereist |
| 403 | session_limit | In Workspace zijn de gelijktijdige livesessies van het plan al geopend (POST /sessions) |
| 404 | not_found | Bron niet gevonden |
| 409 | already_voted | Deze voterId heeft al op de poll gestemd (POST /votes) |
| 409 | already_responded | Deze kiezer heeft de dia al beantwoord (POST /responses) |
| 422 | validation_failed | Schema verzoektekst mislukt validatie |
| 429 | rate_limited | Te veel verzoeken. Probeer het opnieuw nadat het venster opnieuw is ingesteld |
| 500 | internal_error | Onverwachte serverfout |
Nieuwe pogingen en uitstel
We raden een exponentiële back-off met jitter-strategie aan voor productie-integraties:
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:
| fout | Betekenis |
|---|---|
invalid_request | Ontbrekende of onjuist opgemaakte parameters |
invalid_client | Onbekende client_id of verkeerd client_geheim |
access_denied | Client is ingetrokken, heeft een snelheidsbeperking (429) of de werkruimte bevindt zich op de Free-abonnement (402) |
unsupported_grant_type | Alleen client_credentials wordt ondersteund |
Nog vragen?
Ons team helpt je graag verder.