Producto
SDK

Rate Limits

Limites de uso de la API de Plazbot por workspace

La API de Plazbot aplica un limite de uso por workspace para garantizar la estabilidad de la plataforma. El limite usa un modelo token bucket: permite rafagas cortas y castiga solo el uso sostenido por encima del limite.

Limites

RecursoLimite
API REST (todas las rutas)120 requests por minuto por workspace, con rafaga adicional de hasta 40 requests
Webhooks entrantes de workers (POST /api/worker/webhook/{nombre})100 requests por minuto por webhook

El limite se comparte entre todas las integraciones que usan el mismo workspace (SDK, API REST directa, MCP, workers).

Headers de respuesta

Cada respuesta de la API incluye headers informativos para que tu integracion pueda autorregularse:

HeaderDescripcion
X-RateLimit-LimitLimite de requests por minuto del workspace.
X-RateLimit-RemainingRequests disponibles en este momento (incluye la rafaga).

Respuesta al exceder el limite

Cuando el limite se excede, la API responde 429 Too Many Requests con el header Retry-After (segundos a esperar antes de reintentar):

json
01{
02 "success": false,
03 "code": 429,
04 "errorCode": "RATE_LIMIT_EXCEEDED",
05 "message": "Rate limit excedido. Máximo 120 requests por minuto por workspace."
06}

Buenas practicas

  • Respeta Retry-After: al recibir un 429, espera los segundos indicados antes de reintentar. No reintentes en loop inmediato.
  • Usa backoff exponencial en procesos batch: si un 429 se repite, duplica la espera en cada reintento.
  • Pagina con pageSize=100: para recorrer contactos usa el tamano de pagina maximo y minimiza la cantidad de llamadas (ver Contactos - Paginacion).
  • Cachea lo que no cambia: variables del workspace, etiquetas y fases cambian poco; no las consultes en cada request.

Ejemplo de manejo de 429

ts
01async function callWithRetry<T>(fn: () => Promise<T>, maxRetries = 3): Promise<T> {
02 for (let attempt = 0; ; attempt++) {
03 try {
04 return await fn();
05 } catch (error: any) {
06 const status = error?.response?.status;
07 if (status !== 429 || attempt >= maxRetries) throw error;
08 
09 const retryAfter = Number(error.response.headers["retry-after"] ?? 5);
10 await new Promise((r) => setTimeout(r, retryAfter * 1000 * (attempt + 1)));
11 }
12 }
13}
¿Quieres probar la API en vivo? Abre el Playground.