Errores

Todas las respuestas de error usan el mismo envelope. El request_id también viaja en la cabecera X-Request-Id — inclúyelo al reportar un problema.

{
  "error": {
    "code": "invalid_request",
    "message": "text.body no puede estar vacío",
    "request_id": "dev_..."
  }
}

Códigos

CódigoHTTPCuándo
missing_api_key401Falta la cabecera Authorization: Bearer.
invalid_api_key401API key inexistente o revocada.
invalid_request400Cuerpo/cabecera inválidos (JSON, Idempotency-Key, campos).
invalid_whatsapp_number400whatsappNumberId no existe en tu workspace.
forbidden403La API key no tiene permiso para la operación.
not_found404El recurso (mensaje/número) no existe en tu workspace.
idempotency_conflict409Misma Idempotency-Key con un payload distinto.
rate_limit_exceeded429Superaste el límite de tasa. Reintenta según Retry-After.
monthly_message_limit_exceeded429Cuota mensual de mensajes del plan agotada.
internal_error500Error interno. Reporta el request_id si persiste.

Los mensajes (message) son legibles pero pueden cambiar; programa contra code y el status HTTP, nunca contra el texto.