Documentación / Esencial
Consultar el estado de un mensaje
GET /v1/messages/:id
¿Programás con IA? Conectala a tu cuenta por MCP: revisa tu configuración, crea webhooks y plantillas con tu confirmación y te escribe el código. Ver cómo →
GET /v1/messages/:id con el msg_… que devolvió el POST (un id numérico → 404). Un único vocabulario de estado: queued | sending | sent | delivered | read | failed | held. ⚠ Terminales: read, failed y held (un retenido no lo reenviamos nunca: si hace falta, reenvialo vos desde heldUntil). delivered NO es terminal (delivered→read es válido) — si cortás el polling en delivered no ves la lectura.
Un rechazo de WhatsApp NO vuelve como error HTTP. El POST ya contestó 202 (aceptado, no enviado); si Meta lo rechaza, te enterás acá: el mensaje queda failed (o held) con lastErrorCode, un código estable sobre el que podés hacer switch — WINDOW_24H_EXPIRED, RECIPIENT_OPTED_OUT, CONNECTION_TOKEN_REVOKED… El lastError que viene al lado es ayuda en inglés para un humano, no el contrato. El catálogo completo está en el módulo de errores.
Y no hace falta preguntar: el webhook te avisa. Si Meta rechaza nuestro envío (plantilla inexistente, parámetro inválido, número dado de baja…), te llega un message.status con status: "failed", stage: "send", el mismo failureCode que ves acá y messageId = tu msg_…. Una sola vez por mensaje. Los acuses de ENTREGA de lo que mandaste por la API traen connectMessageId = tu msg_… (el messageId ahí es el wamid de Meta); si Meta lo rechaza en la entrega, stage: "delivery" + failureCode, y el mismo código queda en lastErrorCode.
curl https://api.waiaconnect.com/v1/messages/msg_5d325780fe504d0f87eb45009d28ae4f \
-H "Authorization: Bearer wc_live_YOUR_API_KEY"
# → { "id": "msg_…", "status": "delivered", "attempts": 1, "createdAt": "…Z", … }No guardamos contenido: esta respuesta trae metadata (estado, intentos, holdReason), nunca el texto del mensaje.
El rechazo más común es WINDOW_24H_EXPIRED: mandaste texto libre a alguien que no te escribió en las últimas 24 horas. Se resuelve con una plantilla aprobada.