Errores y límites

Los errores siempre llegan con esta estructura:

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "phone o email requerido"
  }
}
HTTPCódigoDescripción
400VALIDATION_ERRORFalta un campo requerido o tiene formato inválido
401MISSING_API_KEYNo enviaste el header Authorization
401INVALID_API_KEYToken inválido, revocado o expirado
403MODULE_NOT_ENABLEDTu plan no incluye la API pública
403INSUFFICIENT_SCOPELa API key no tiene el permiso necesario
404NOT_FOUNDEl recurso no existe o no pertenece a tu cuenta
404TEMPLATE_NOT_FOUNDLa plantilla no existe en tu WABA
400TEMPLATE_NOT_APPROVEDLa plantilla existe pero Meta aún no la aprueba
400TEMPLATE_PARAMS_MISMATCHFaltan o sobran valores para las variables de la plantilla
413MEDIA_TOO_LARGEEl archivo supera los 15 MB
422MEDIA_DOWNLOAD_FAILEDNo se pudo descargar el media_url
429RATE_LIMIT_PUBLIC_APISuperaste el límite de peticiones
500INTERNAL_ERRORError interno; reintenta más tarde

Rate limiting

Por defecto cada cuenta puede hacer 300 peticiones por minuto a la API. Cada respuesta incluye headers para monitorear tu consumo:

HeaderDescripción
X-RateLimit-LimitLímite de tu ventana actual
X-RateLimit-RemainingPeticiones restantes
Retry-AfterSegundos a esperar (solo en respuestas 429)

Al superar el límite recibes 429:

{
  "success": false,
  "code": "RATE_LIMIT_PUBLIC_API",
  "error": "Has superado el limite configurado para tu plan. Espera un momento."
}

¿Necesitas más volumen?:

Si tu integración requiere un límite mayor, contáctanos y lo ajustamos para tu cuenta.

Buenas prácticas

  • Reintentos con espera exponencial: ante 429 o 5xx, espera y reintenta (respeta Retry-After)
  • Idempotencia: usa client_request_id al enviar mensajes para evitar duplicados
  • Paginación: no pidas más de lo que necesitas; usa limit y offset
  • Webhooks en lugar de polling: para reaccionar a mensajes nuevos, suscríbete a message.received en lugar de consultar la API repetidamente