Límites de Tasa

Entiende los límites de tasa de la API y cómo manejarlos.

Descripción General

Los límites de tasa protegen la API contra abuso y aseguran un uso justo. Los límites se aplican por API key.

Límites Actuales

API REST

EntornoLímiteVentana
Claves live (wk_live_)1,000 peticionesPor minuto
Claves test (wk_test_)100 peticionesPor minuto

Endpoints OAuth

EndpointLímiteVentana
POST /oauth/token60 peticiones por IPPor minuto
POST /oauth/token30 peticiones por client_idPor minuto
POST /oauth/register10 peticiones por IPPor hora

Las respuestas de límite de tasa en OAuth incluyen el header Retry-After (segundos de espera). Implementa backoff exponencial — consulta Errores OAuth para un ejemplo de código.

Headers de Respuesta

Cada respuesta de la API incluye información sobre los límites de tasa:

HeaderDescripción
X-RateLimit-LimitMáximo de peticiones por ventana
X-RateLimit-RemainingPeticiones restantes en la ventana actual
X-RateLimit-ResetTimestamp Unix cuando la ventana se reinicia

Manejo de Límites de Tasa

Cuando excedes el límite, la API devuelve 429 Too Many Requests:

{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Try again in 45 seconds."
  }
}

Backoff Exponencial

Implementa reintentos automáticos con demoras incrementales:

async function apiRequest(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status !== 429) return response;

    const resetAt = response.headers.get('X-RateLimit-Reset');
    const waitMs = resetAt
      ? (Number(resetAt) * 1000) - Date.now()
      : Math.pow(2, attempt) * 1000;

    await new Promise(resolve => setTimeout(resolve, waitMs));
  }
  throw new Error('Rate limit exceeded after max retries');
}

Mejores Prácticas

  1. Cachea respuestas cuando sea posible para reducir llamadas a la API
  2. Usa webhooks en lugar de polling para datos en tiempo real
  3. Agrupa operaciones donde la API lo soporte
  4. Monitorea tu uso a través del header X-RateLimit-Remaining
  5. Distribuye las peticiones a lo largo del tiempo en lugar de hacer ráfagas

On this page