Vapadu Logo
v1.0.5

Vapadu API

Documentación oficial — Versión 1.0.5

Vapadu WhatsApp API Documentation - Versión 1.0.5

Para poder realizar las peticiones en primera instancia de debe obtener un token de sesión:

  • LoginPOST /session/login

La API de Vapadu permite enviar mensajes a WhatsApp usando los siguientes endpoints:

  • TextoPOST /messages/wpp/send/text
  • ImagenPOST /messages/wpp/send/image
  • DocumentoPOST /messages/wpp/send/document
  • Botones (Quick Reply)POST /messages/wpp/send/buttons
  • Botón (Url)POST /messages/wpp/send/button/url
  • TemplatePOST /messages/wpp/send/template
  • Asistente AIPOST /assistance/mode

La API de Vapadu además permite consultar templates disponibles WhatsApp usando los siguientes endpoints:

  • Get TemplatesGET /templates/all
  • Template por nombrePOST /templates/find/by/name

Todas las respuestas siguen el formato:

{
  "success": true,
  "result": {} // WhatsAppAPIResponse<T>
}

En caso de error:

{
  "success": false,
  "result": {
    "error": {
      "message": "Descripción del error",
      "type": "API Error",
      "code": 123,
      "fbtrace_id": "XYZ"
    }
  }
}

Requisitos generales

Headers obligatorios

Content-Type: application/json

Authorization: <YOUR_API_KEY>

Campos mínimos obligatorios para todos los endpoints

CampoTipoDescripción
tostringNúmero de WhatsApp en formato internacional (ej: "5491160000000")

Inicio de sesión

POST

/session/login

/session/login

Body (JSON)
CampoTipoRequeridoDescripción
usernamestringNombre de usuario registrado
passwordstringContraseña del usuario

Nota: Las credenciales de acceso son provistas exclusivamente por el equipo de Vapadu previa validación. Nota: El tiempo de expiración del token provisto es de 2 horas.

{
  "username": "usuario",
  "password": "password"
}

Enviar mensaje de TEXTO

POST

/messages/wpp/send/text

/messages/wpp/send/text

Body (JSON)
CampoTipoRequeridoDescripción
tostringWhatsApp ID del destinatario
messagestringContenido del mensaje
previewUrlbooleanHabilita previsualización si incluye URL
{
  "to": "5491160000000",
  "message": "Hola! Este es tu asistente Vapadu 🤖",
  "previewUrl": false
}

️ Enviar mensaje de IMAGEN

POST

/messages/wpp/send/image

/messages/wpp/send/image

Body (JSON)
CampoTipoRequeridoDescripción
tostringNúmero de destino
urlstringURL pública de la imagen
mediaIdstringID de media ya cargado a Meta
captionstringTexto opcional

Nota: Debés enviar url o mediaId (uno de los dos).

{
  "to": "5491160000000",
  "url": "https://example.com/imagen.jpg",
  "caption": "Aquí tenés tu imagen 📷"
}
{
  "to": "5491160000000",
  "mediaId": "12345678901234",
  "caption": "Archivo desde media_id"
}

Enviar mensaje DOCUMENTO

POST

/messages/wpp/send/document

/messages/wpp/send/document

Body (JSON)
CampoTipoRequeridoDescripción
tostringNúmero destino
urlstringURL pública del PDF/archivo
mediaIdstringID de media
fileNamestringNombre visible del archivo
captionstringTexto descriptivo

Nota: Se debe enviar url o mediaId, no ambos.

{
  "to": "5491160000000",
  "url": "https://example.com/reporte.pdf",
  "fileName": "reporte_final.pdf",
  "caption": "Tu reporte está listo 📄"
}

Enviar mensaje de BOTONES (Quick Reply)

POST

/messages/wpp/send/buttons

/messages/wpp/send/buttons

Body (JSON)
CampoTipoRequeridoDescripción
tostringNúmero destino
bodyTextstringTexto principal
buttonsarrayMáximo 3 botones
headerTextstringEncabezado opcional
footerTextstringPie de mensaje opcional

Estructura de cada botón

{

"id": "help_support",

"title": "Soporte"

}

{
  "to": "5491160000000",
  "headerText": "Centro de ayuda",
  "bodyText": "¿Con qué necesitas ayuda?",
  "footerText": "Selecciona una opción",
  "buttons": [
    {
      "id": "opt_products",
      "title": "Productos"
    },
    {
      "id": "opt_support",
      "title": "Soporte"
    },
    {
      "id": "opt_other",
      "title": "Otro"
    }
  ]
}

Enviar mensaje de BOTÓN (URL)

POST

/messages/wpp/send/button/url

/messages/wpp/send/button/url

Body (JSON)
CampoTipoRequeridoDescripción
tostringNúmero destino
bodyTextstringTexto principal
urlstringUrl a enviar
buttonLabelstringTexto para url
headerTypestringTipo de header opcional
headerTextstringEncabezado opcional para tipo "text"
headerLinkstringEncabezado opcional para tipos: "image", "document", "video"
footerTextstringPie de mensaje opcional
{
  "to": "5491160000000",
  "headerText": "Salta - Capital",
  "headerType": "text",
  "bodyText": "Plaza principal de la ciudad",
  "footerText": "Ciudad de Salta",
  "url": "https://maps.app.goo.gl/JVyHhtnrbAasdkjy9",
  "buttonLabel": "Plaza 9 de Julio"
}

Enviar templates

POST

/messages/wpp/send/template

/messages/wpp/send/template

Body (JSON)
CampoTipoRequeridoDescripción
tostringNúmero destino
templatestringNombre del template
paramsarrayParámetros variables

Estructura de cada param

{

"type": "header" | "body" | "button",

"text": "Texto de ejemplo",

"order": 2

}

* Determina la posición secuencial del parámetro dentro de su grupo (HEADER, BODY o BUTTON).

{
  "to": "5491160000000",
  "template": "nombre_template",
  "params": [
    {
      "type": "body",
      "order": 1,
      "text": "Juan"
    },
    {
      "type": "body",
      "order": 2,
      "text": "YPF"
    }
  ]
}

Consulta de Templates

GET

/templates/all

/templates/all

{
  "code": 404,
  "success": false,
  "message": "No se encontraron templates"
}
{
  "code": 404,
  "success": false,
  "message": "Se venció el token, genere uno nuevo"
}
{
  "code": 200,
  "success": true,
  "result": {
    "templates": {
      "data": [
        {
          "name": "template_name",
          "parameter_format": "POSITIONAL",
          "components": [
            {
              "type": "HEADER",
              "format": "TEXT",
              "text": "Es un ejemplo de header"
            },
            {
              "type": "BODY",
              "text": "Hola {{1}}, ganaste un premio de $ {{2}} !! Felicitaciones!",
              "example": {
                "body_text": [["Pablo", "1.000.000"]]
              }
            },
            {
              "type": "FOOTER",
              "text": "Tecnología VAPADU"
            }
          ],
          "language": "es_AR",
          "status": "APPROVED",
          "category": "MARKETING",
          "id": "123456789123"
        },
        {
          "name": "template_name_2",
          "previous_category": "UTILITY",
          "parameter_format": "POSITIONAL",
          "components": [
            {
              "type": "BODY",
              "text": "👀Hola de nuevo, {{1}}.\\n\\n*¡No recibí tu respuesta!*",
              "example": {
                "body_text": [["Juan Pablo"]]
              }
            }
          ],
          "language": "es_AR",
          "status": "APPROVED",
          "category": "MARKETING",
          "id": "123456789124"
        },
        {
          "name": "template_name_3",
          "parameter_format": "POSITIONAL",
          "components": [
            {
              "type": "BODY",
              "text": "Informé la situación al Área de Coordinación."
            }
          ],
          "language": "es_AR",
          "status": "APPROVED",
          "category": "UTILITY",
          "id": "123456789125"
        }
      ],
      "paging": {
        "cursors": {
          "before": "QVFIU2x5ME...",
          "after": "QVFIU212M19od..."
        }
      }
    }
  }
}

Consulta de Template por nombre

POST

/templates/find/by/name

/templates/find/by/name

{
  "template": "nombre_template"
}

Cambiar el estado del diálogo: De BOT a AI

POST

/assistance/mode

/assistance/mode

Body (JSON)
CampoTipoRequeridoDescripción
tostringNúmero destino
modestringEstado del asistente: "MANUAL" o "AUTOMATIC"
linkerstring

Nota: El linker es el alias del asistente, es importante visualizar y listar los alias desde el panel.

Estructura de cada param

{

"mode": "AUTOMATIC" | "MANUAL" ,

"to": "5493445455422",

"linker": "default"

}

{
  "to": "5491160000000",
  "mode": "AUTOMATIC",
  "linker": "default"
}

Respuesta por webhook

POST

/url/vinculada

/url/vinculada

{

"type": "message",

"from": "5491160000000",

"message": "Hola! Me podés pasar información",

"metaData": {

`"messages": [`

    `{ "id": "wamid.HBgLC..." }`

  `],`

`...`

}

}

{
"type": "status",
"from": "5491160000000",
"metaData": {
    "messages": [
        { "id": "wamid.HBgLC..." }
      ],
    ...
},
"status": "accepted"
}

Respuestas - Estructura Estándar

Todas las respuestas siguen este contrato:

type VapaduResponse<T> = {
  success: boolean;
  result: AxiosResponse<T | WhatsAppErrorResponse>;
};

Ejemplo de error

{
  "success": false,
  "result": {
    "error": {
      "message": "Invalid phone number format",
      "type": "OAuthException",
      "code": 131009,
      "fbtrace_id": "ABC123XYZ"
    }
  }
}

Validaciones generales por endpoint

✔️ Obligatorio para todos:

  • to debe ser string y contener solo números.
  • Longitud mínima recomendada: 11 dígitos.

❌ Errores comunes:

  • (#131009) Phone number invalid
  • (#100) Param X is required
  • (#131021) Media not found

Conclusión

Esta documentación está diseñada para que cualquier equipo técnico pueda integrar Vapadu WhatsApp Messaging en minutos, con claridad absoluta en:

  • Inputs obligatorios
  • Opcionales
  • Ejemplos reales
  • Estándares de respuesta