Errores de la API
Cada error trae un errorCode estable: úsalo para decidir qué hacer en tu código. El texto de message está pensado para personas y puede cambiar.
{
"status": 400,
"error": "Validation Error",
"errorCode": "VALIDATION_ERROR",
"message": "Hay un dato que corregir: el destinatario debe ser un teléfono en formato E.164 (ej. +5215555550001).",
"fieldErrors": [{ "field": "to", "message": "debe ser un teléfono en formato E.164" }],
"docsUrl": "https://pulsend.e2ecore.com/docs/errors#validation-error",
"errorId": "fdf24db5-…",
"path": "/api/v1/messages"
}
Si escribes a soporte, incluye el errorId: con él encontramos tu solicitud.
Índice
- UNAUTHENTICATED
- INVALID_API_KEY
- FORBIDDEN_CAPABILITY
- MODULE_DISABLED
- VALIDATION_ERROR
- BAD_REQUEST
- UNSUPPORTED_MEDIA_TYPE
- MESSAGE_VARIABLES_NOT_SUPPORTED
- MEDIA_URL_INVALID
- MEDIA_NOT_SUPPORTED
- RESOURCE_NOT_FOUND
- IDEMPOTENCY_KEY_REUSED
- CONFLICT
- SLOT_TAKEN
- LIVE_KEY_REQUIRES_VERIFIED_BUSINESS
- CONSENT_ATTESTATION_REQUIRED
- CONTENT_BLOCKED
- RATE_LIMITED
- VERIFY_INVALID_PHONE
- VERIFY_COUNTRY_NOT_ALLOWED
- VERIFY_ACCOUNT_NOT_VERIFIED
- VERIFY_RATE_LIMITED
- VERIFY_DAILY_SPEND_CAP_REACHED
- VERIFY_INSUFFICIENT_FUNDS
- VERIFY_QUOTA_EXHAUSTED
- VERIFY_NOT_FOUND
- VERIFY_EXPIRED
- VERIFY_MAX_ATTEMPTS_REACHED
- Estados de entrega (CHANNEL_OPT_OUT, SANDBOX_DELIVERY_FAILED…)
Autenticación y permisos
UNAUTHENTICATED
HTTP 401- Qué pasó
- La solicitud no trae credenciales.
- Qué hacer
- Envía el encabezado
Authorization: Bearer plsm_…con una llave activa. Las llaves se crean en el panel, en Desarrolladores › Llaves de API.
INVALID_API_KEY
HTTP 401- Qué pasó
- La llave no existe, fue revocada o ya venció.
- Qué hacer
- Revisa que la copiaste completa (empieza con
plsm_, sin espacios ni saltos de línea). Si la revocaste o venció, crea una nueva: la llave completa solo se muestra una vez, al crearla.
FORBIDDEN_CAPABILITY
HTTP 403- Qué pasó
- La llave es válida, pero no tiene el permiso que pide ese endpoint (por ejemplo,
messages:readpara consultar un envío). - Qué hacer
- Crea una llave con el permiso que falta. Los permisos de una llave no se pueden ampliar después de crearla.
MODULE_DISABLED
HTTP 403- Qué pasó
- Tu cuenta no tiene activado el módulo que usa ese endpoint (por ejemplo, la agenda de citas).
- Qué hacer
- Un administrador de la cuenta puede activarlo en Configuración › Módulos. Si tu plan no lo incluye, el panel te dice qué plan lo trae.
Datos de la solicitud
VALIDATION_ERROR
HTTP 400- Qué pasó
- Falta un campo obligatorio o uno trae un valor inválido.
fieldErrorsdice cuál y por qué. - Qué hacer
- Corrige los campos que indica
fieldErrors. Los teléfonos van en formato E.164, con+y código de país:+5215555550001.
BAD_REQUEST
HTTP 400- Qué pasó
- La solicitud no se puede leer: JSON mal formado, un parámetro con el tipo equivocado o un encabezado obligatorio que falta.
- Qué hacer
- El
messagenombra el dato con problema. Valida tu JSON y revisa que los parámetros tengan el tipo que documenta la referencia.
UNSUPPORTED_MEDIA_TYPE
HTTP 415- Qué pasó
- El cuerpo no llegó como JSON.
- Qué hacer
- Envía el encabezado
Content-Type: application/jsony el cuerpo en JSON.
MESSAGE_VARIABLES_NOT_SUPPORTED
HTTP 400- Qué pasó
- El texto trae variables como
{{nombre}}, pero en este envío no hay un contacto del cual tomar sus valores. - Qué hacer
- Manda el texto final, con los valores ya sustituidos en tu sistema.
MEDIA_URL_INVALID
HTTP 400- Qué pasó
mediaUrlno es una direcciónhttpspública.- Qué hacer
- Usa una URL
https://que se pueda abrir sin iniciar sesión.
MEDIA_NOT_SUPPORTED
HTTP 422- Qué pasó
- Enviaste
mediaUrl, pero la ruta de SMS activa no entrega imágenes (MMS). No lo mandamos como texto solo para no cambiar tu mensaje sin avisarte. - Qué hacer
- Quita
mediaUrly pon el enlace dentro del texto, o usa un canal que acepte imágenes, como WhatsApp.
RESOURCE_NOT_FOUND
HTTP 404- Qué pasó
- No hay nada con ese id en tu cuenta. Un id de otra cuenta también responde 404, nunca 403.
- Qué hacer
- Verifica el id que recibiste al crear el recurso. Los envíos reales (llave de Producción) se siguen por webhooks;
GET /api/v1/messages/{id}devuelve solo envíos de prueba.
IDEMPOTENCY_KEY_REUSED
HTTP 422- Qué pasó
- Ya usaste ese
Idempotency-Keycon un cuerpo distinto. - Qué hacer
- Para reintentar, repite la solicitud original sin cambios: te devolvemos el mismo resultado sin enviar dos veces. Para enviar algo diferente, genera un
Idempotency-Keynuevo (un UUID por envío).
CONFLICT
HTTP 409- Qué pasó
- El recurso ya existe (por ejemplo, un contacto con ese teléfono) o su estado actual no permite la acción.
- Qué hacer
- Consulta el recurso existente y actualízalo en lugar de crear otro.
SLOT_TAKEN
HTTP 409- Qué pasó
- Alguien acaba de reservar ese horario.
- Qué hacer
- Vuelve a pedir la disponibilidad y ofrece otro horario.
Envíos
LIVE_KEY_REQUIRES_VERIFIED_BUSINESS
HTTP 422- Qué pasó
- Una llave de Producción intentó enviar a un número que no es de prueba, pero tu negocio todavía no está verificado.
- Qué hacer
- Verifica tu negocio en el panel (Verificar mi negocio). Mientras tanto, integra con una llave de Prueba: los envíos se simulan y no cuestan.
CONSENT_ATTESTATION_REQUIRED
HTTP 422- Qué pasó
- Tu cuenta no ha declarado que sus contactos aceptaron recibir mensajes.
- Qué hacer
- Un administrador lo declara una vez en Configuración; después los envíos reales funcionan.
CONTENT_BLOCKED
HTTP 422- Qué pasó
- El texto coincide con una regla de cumplimiento (por ejemplo, suplantación, préstamos sin licencia o enlaces engañosos) y se detuvo antes de salir.
- Qué hacer
- Reescribe el mensaje. Si crees que es un error, escríbenos a soporte con el
errorId.
RATE_LIMITED
HTTP 429- Qué pasó
- Hiciste demasiadas solicitudes en poco tiempo.
- Qué hacer
- Espera los segundos que indica
retryAfterSeconds(o el encabezadoRetry-After) y reintenta. Reintenta con espera creciente, no en un ciclo inmediato.
Códigos de verificación (Verify)
VERIFY_INVALID_PHONE
HTTP 400- Qué pasó
- El número no es válido.
- Qué hacer
- Envíalo en formato internacional E.164, por ejemplo
+525512345678.
VERIFY_COUNTRY_NOT_ALLOWED
HTTP 422- Qué pasó
- No enviamos códigos a números de ese país. El
messagelista los países habilitados. - Qué hacer
- Si necesitas otro país, escríbenos a soporte.
VERIFY_ACCOUNT_NOT_VERIFIED
HTTP 422- Qué pasó
- Tu cuenta todavía no puede enviar códigos reales.
- Qué hacer
- Completa la verificación del negocio en el panel. Mientras tanto, prueba con una llave de Prueba.
VERIFY_RATE_LIMITED
HTTP 429- Qué pasó
- Se pidieron demasiados códigos para el mismo número en poco tiempo. Es una protección contra abuso y contra cobros por SMS falsos.
- Qué hacer
- Espera
retryAfterSecondsantes de pedir otro. En tu interfaz, deshabilita el botón «Reenviar código» durante ese tiempo.
VERIFY_DAILY_SPEND_CAP_REACHED
HTTP 429- Qué pasó
- La llave llegó a su tope diario de gasto en códigos.
- Qué hacer
- Se libera a medianoche (UTC). Si tu volumen legítimo es mayor, pide a soporte que lo amplíe.
VERIFY_INSUFFICIENT_FUNDS
HTTP 402- Qué pasó
- Tu saldo no alcanza para enviar el código.
- Qué hacer
- Recarga saldo en Facturación › Plan y pagos, o activa la recarga automática para que no vuelva a pasar.
VERIFY_QUOTA_EXHAUSTED
HTTP 429- Qué pasó
- Usaste todos los envíos que incluye tu plan este mes. El
messagedice cuándo se renuevan. - Qué hacer
- Espera la renovación o mejora tu plan en Facturación › Plan y pagos.
VERIFY_NOT_FOUND
HTTP 404- Qué pasó
- No hay un código pendiente para ese número o identificador. Puede que se haya reemplazado por uno más nuevo o que ya se haya usado.
- Qué hacer
- Revisa el dato o solicita un código nuevo con
POST /api/v1/verify.
VERIFY_EXPIRED
HTTP 410- Qué pasó
- El código venció.
- Qué hacer
- Solicita uno nuevo con
POST /api/v1/verify.
VERIFY_MAX_ATTEMPTS_REACHED
HTTP 429- Qué pasó
- Se agotaron los intentos para este código.
- Qué hacer
- Solicita un código nuevo con
POST /api/v1/verify.
Estados de entrega
Estos no son errores de la solicitud: el envío se aceptó (201 o 202) y el resultado llega en status y errorCode del mensaje, o en tus webhooks.
CHANNEL_OPT_OUT: el destinatario se dio de baja de ese canal. No se envió ni se cobró.SANDBOX_DELIVERY_FAILED: falla simulada de una llave de Prueba (números terminados en0002).
Con una llave de Prueba los números que terminan en 0001 (entregado), 0002 (falla), 0003 (entregado y baja), 0004 (leído, WhatsApp) y 0005 (fuera de la ventana de 24 h) simulan cada resultado sin enviar nada real.