Límites
Iguales en todos los planes de AdSmartBot, sin costo aparte. Están para que ningún sistema con un error tumbe la cuenta ni envíe miles de mensajes sin querer.
Ritmo
| Límite | Cuánto |
|---|---|
| Por clave | 120 peticiones por minuto, y no más de 20 en un mismo segundo |
| Por cuenta | 300 peticiones por minuto, sumando todas sus claves |
| Envíos | 120 por minuto por cuenta: mensajes y flujos lanzados, también los run_flow y subscribe_sequence de las actions de POST /contacts (cuentan también arriba) |
| Plantillas iniciadas por la API | 1000 al día a clientes con la ventana de 24 horas cerrada (50 en la prueba gratis), aunque pasen por una regla o un flujo |
| Códigos de verificación | 5 por teléfono cada 10 minutos y 20 al día (type: "verification_code"), para que nadie reciba códigos que no pidió. También cuentan en el tope de plantillas de arriba |
| Borrar contactos | 500 al día por clave (no disponible en la prueba gratis) |
| Avisos a otros sistemas | 25 por cuenta y 5 hacia un mismo dominio (Zapier, Make, n8n y Pabbly solo cuentan para el de la cuenta) |
| Claves de acceso | 25 vivas por cuenta |
| Peticiones fallidas sin clave válida | 60 por minuto por IP (también una clave enviada en la dirección) |
Si tu cuenta de verdad necesita más, escríbenos: se sube sin costo.
Lo que ves en cada respuesta
Toda respuesta trae el límite más cercano a agotarse. RateLimit-Reset son los segundos que faltan para que se renueve.
RateLimit-Limit: 120
RateLimit-Remaining: 87
RateLimit-Reset: 23Al pasarte, la petición no se hace (nada queda a medias) y recibes 429 rate_limited con Retry-After y details.limit, que dice cuál pasaste: key, account, sends, daily_templates, verification_codes, deletes o ip.
Nadie se castiga: ninguna clave se apaga por pasarse. Si una clave pasa mucho tiempo topada, el dueño de la cuenta recibe un aviso.
Tamaños
| Qué | Hasta |
|---|---|
| Cuerpo de una petición | 1 MB |
| Texto de un mensaje | 4096 caracteres (el tope de WhatsApp) |
| Valor de un campo | 2000 caracteres (texto largo: 10.000) |
Datos al lanzar un flujo (data) |
50 datos y 32 KB |
| Una página de una lista | 100 (por defecto 25) |
| Un aviso a otro sistema | 256 KB |
Cómo reintentar bien
- Envía siempre
Idempotency-Keyen lo que crea o envía (el número de pedido y lo que haces:pedido-A-1043-enviado). Repetir con la misma clave devuelve la misma respuesta sin volver a hacerlo, durante 24 horas. - Con
429o un5xx, espera los segundos deRetry-After(o unos segundos, creciendo) y repite con la mismaIdempotency-Key. - Con un
4xxdistinto de429, no repitas igual: corrige lo que diceerror.code.
Zapier, Make y n8n reintentan solos cuando ven 429 y Retry-After.
Sincronizar sin perder filas
Las listas van por cursor: cada página sigue exactamente desde el último que viste, aunque entren datos nuevos mientras recorres.
Para copiar contactos a otro sistema: pide GET /contacts?updated_since=…&sort=updated_at&order=asc, recorre hasta has_more: false, guarda el updated_at más alto y la próxima vez pide desde un minuto antes. Las listas ordenadas por updated_at no traen lo de los últimos 60 segundos, a propósito: así no se pierde lo que se estaba guardando. Los borrados llegan con el aviso contact.deleted o en GET /contacts/deleted.