2xx salió bien, 4xx hay algo para corregir en la llamada o en la cuenta, 5xx falló algo de nuestro lado o de Meta.
Formato
Casi todos los errores tienen esta forma:error: explica el problema en español. Está pensado para mostrarlo tal cual a tu equipo.cause: detalle para tu código. Esnullsalvo en los errores de plan (402).
Los mensajes de error usan el español de Argentina (“usá”, “elegí”), igual que la app de eltick.
Errores de validación
Cuando al cuerpo o a los parámetros les falta algo o tienen un tipo equivocado, la respuesta400 tiene otra forma: error.message es un JSON (en texto) con la lista de problemas. path dice qué campo y message por qué.
Códigos
400 · Datos inválidos
400 · Datos inválidos
Algo del pedido no es válido. Los casos más comunes:
- Falta un campo obligatorio (
phoneen contactos,toen mensajes). - Mandaste
textytemplatea la vez, o ninguno de los dos: “Mandátextotemplate, uno de los dos.” - El teléfono no es válido: “El teléfono “123” no es válido. Usá formato internacional, por ejemplo +5491123456789.” Revisa Formato de teléfonos.
limitfuera de rango (1 a 200) oafterque no es un UUID.
401 · Sin autenticación
401 · Sin autenticación
Falta la clave, está mal escrita o fue revocada.Qué hacer: revisa que el encabezado sea
Authorization: Bearer etk_live_… y que la clave siga activa en Ajustes › API y webhooks.402 · Tu plan no lo permite
402 · Tu plan no lo permite
La cuenta no tiene un plan que permita esto. Qué hacer: avisa a quien administra la cuenta. Se resuelve en Ajustes › Plan y uso. El límite de contactos solo se aplica al crear contactos nuevos (con
cause.reason te dice por qué:cause.suggested es el plan que lo resolvería.POST /contacts o al mandar un mensaje a un teléfono que no estaba).404 · No existe
404 · No existe
El recurso no existe en esta cuenta: “Mensaje no encontrado.” o “La plantilla ya no existe.”Qué hacer: revisa el id. Los ids son de cada cuenta: una clave no ve lo de otra cuenta.
409 · No se puede mandar ahora
409 · No se puede mandar ahora
El pedido es válido, pero WhatsApp no deja hacerlo en este momento:
- “Pasaron más de 24 horas desde el último mensaje del cliente. Para escribirle, usá una plantilla.” → manda una plantilla en vez de
text. - “La plantilla todavía no está aprobada por Meta.” → espera la aprobación o usa otra.
- “No hay un número de WhatsApp conectado con ese id.” → revisa
phoneNumberId. - “Tu WhatsApp está desconectado.” → vuelve a conectar el número en Ajustes › Números y canales.
502 · Meta rechazó el mensaje
502 · Meta rechazó el mensaje
Meta no aceptó el envío. El mensaje incluye el motivo que dio Meta, por ejemplo:Qué hacer: lee el motivo. Algunos son temporales (reintenta en unos minutos) y otros son de la cuenta de Meta, como que falte el medio de pago. Mira Cargar el medio de pago.
500 · Error inesperado
500 · Error inesperado
Mensajes que se aceptan pero después fallan
Un201 en POST /messages quiere decir que Meta aceptó el mensaje, no que ya llegó. La entrega puede fallar después: por ejemplo, si el número no tiene WhatsApp. En ese caso el mensaje queda con status: "failed" y un código de Meta:
GET /messages/{id} o con el webhook message.status.
Códigos de Meta frecuentes:
Reintentos seguros
- Reintenta solo
500,502temporales y errores de red. POST /contactsse puede reintentar sin problema: si el contacto ya existe, lo actualiza.POST /messagesno es idempotente: si reintentas después de un timeout, el cliente podría recibir el mensaje dos veces. Antes de reintentar, fíjate si el mensaje ya aparece en el chat o guarda elidde la primera respuesta.

