WABA API

Referencia para integrar WhatsApp Business API por rutas públicas de Sendeasy.

Autenticación

Header obligatorio:

Authorization: Bearer <api_token>

Prefijo de rutas

/api/v1/waba/:whatsappId

Templates

MétodoEndpointFinalidad
GET/templatesListar templates
POST/templatesCrear template
PUT/templates/:templateIdActualizar template
DELETE/templates/:templateNameEliminar template

Mensajes

MétodoEndpointFinalidad
POST/sendEnviar template (o texto simple con body específico)
POST/send-textEnviar texto
POST/send-imageEnviar imagen
POST/send-videoEnviar video
POST/send-audioEnviar audio
POST/send-documentEnviar documento
POST/marketing-lite/sendEnviar mensaje de marketing (Marketing Messages Lite API)

Nueva API: mensaje de marketing

Endpoint público:

POST /api/v1/waba/:whatsappId/marketing-lite/send

Endpoint Meta usado por el backend:

POST /{phone-number-id}/marketing_messages

Prerrequisitos:

  1. Cuenta WABA con onboarding de Marketing Messages Lite finalizado.
  2. Términos de Marketing Messages Lite aceptados en la cuenta Meta.
  3. Template en categoría MARKETING con estado APPROVED.

Payload

CampoTipoObligatorioObservaciones
tostringnúmero en formato internacional (solo dígitos)
templateNamestringnombre de template aprobado en Meta
languagestringNopor defecto: pt_BR
componentsarrayNocomponentes/parámetros del template
productPolicystringNoCLOUD_API_FALLBACK (default) o STRICT
messageActivitySharingbooleanNopor defecto: true
bizOpaqueCallbackDatastringNoregresa en webhook para correlación de campaña

Ejemplo: envío de mensaje de marketing

curl --location 'https://server.sendeasy.pro/api/v1/waba/SEU_WHATSAPP_ID/marketing-lite/send' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer SEU_API_TOKEN' \
  --data '{
    "to": "5511999999999",
    "templateName": "promo_blackfriday",
    "language": "pt_BR",
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Juan" }
        ]
      }
    ],
    "productPolicy": "CLOUD_API_FALLBACK",
    "messageActivitySharing": true,
    "bizOpaqueCallbackData": "campaign_blackfriday_2026"
  }'

Respuesta de éxito (ejemplo):

{
  "messages": [
    { "id": "wamid.HBg..." }
  ]
}

Error de límite/opt-out (ejemplo):

{
  "error": "MARKETING_LIMIT_REACHED",
  "message": "User has opted out of marketing messages or reached the limit",
  "details": "..."
}

Ejemplo: envío de texto

curl --location 'https://server.sendeasy.pro/api/v1/waba/SEU_WHATSAPP_ID/send-text' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer SEU_API_TOKEN' \
  --data '{
    "to": "5511999999999",
    "text": "¡Hola! Mensaje enviado por la WABA API."
  }'

Ejemplo: envío de template

{
  "to": "5511999999999",
  "templateName": "boas_vindas",
  "language": "pt_BR",
  "components": [
    {
      "type": "body",
      "parameters": [
        { "type": "text", "text": "Juan" }
      ]
    }
  ]
}

Códigos de error comunes

CódigoCuándo ocurre
WHATSAPP_NOT_FOUNDwhatsappId no existe
WHATSAPP_CREDENTIALS_MISSINGcanal sin credenciales WABA completas
MISSING_PARAMETERSfaltan campos obligatorios del payload
MARKETING_LIMIT_REACHEDcontacto con opt-out o límite de marketing alcanzado
WHATSAPP_API_ERRORerror devuelto por la API de Meta

Webhooks WABA (contrato público)

Cuando el webhook del proyecto está habilitado, Sendeasy envía:

  1. event: "messaging" para eventos de mensaje.
  2. event: "message_status" para actualizaciones de estado de entrega.

Ejemplo (messaging):

{
  "event": "messaging",
  "channel": "waba",
  "data": {},
  "channelId": "uuid-del-canal"
}

Ejemplo (message_status):

{
  "event": "message_status",
  "channel": "whatsapp",
  "data": {
    "messageId": "wamid.HBg...",
    "status": "read",
    "timestamp": "1713800010"
  },
  "channelId": "uuid-del-canal"
}

Valores comunes de data.status:

  • sent
  • delivered
  • read
  • failed

Essa informação foi útil?