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:
- Login →
POST /session/login
La API de Vapadu permite enviar mensajes a WhatsApp usando los siguientes endpoints:
- Texto →
POST /messages/wpp/send/text - Imagen →
POST /messages/wpp/send/image - Documento →
POST /messages/wpp/send/document - Botones (Quick Reply) →
POST /messages/wpp/send/buttons - Botón (Url) →
POST /messages/wpp/send/button/url - Template →
POST /messages/wpp/send/template - Asistente AI →
POST /assistance/mode
La API de Vapadu además permite consultar templates disponibles WhatsApp usando los siguientes endpoints:
- Get Templates →
GET /templates/all - Template por nombre →
POST /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
| Campo | Tipo | Descripción |
|---|---|---|
to | string | Número de WhatsApp en formato internacional (ej: "5491160000000") |
Inicio de sesión
/session/login
/session/login
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Nombre de usuario registrado | |
password | string | Contraseñ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
/messages/wpp/send/text
/messages/wpp/send/text
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | WhatsApp ID del destinatario | |
message | string | Contenido del mensaje | |
previewUrl | boolean | Habilita previsualización si incluye URL |
{
"to": "5491160000000",
"message": "Hola! Este es tu asistente Vapadu 🤖",
"previewUrl": false
}️ Enviar mensaje de IMAGEN
/messages/wpp/send/image
/messages/wpp/send/image
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | Número de destino | |
url | string | URL pública de la imagen | |
mediaId | string | ID de media ya cargado a Meta | |
caption | string | Texto opcional |
Nota: Debés enviar
urlomediaId(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
/messages/wpp/send/document
/messages/wpp/send/document
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | Número destino | |
url | string | URL pública del PDF/archivo | |
mediaId | string | ID de media | |
fileName | string | Nombre visible del archivo | |
caption | string | Texto descriptivo |
Nota: Se debe enviar
urlomediaId, 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)
/messages/wpp/send/buttons
/messages/wpp/send/buttons
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | Número destino | |
bodyText | string | Texto principal | |
buttons | array | Máximo 3 botones | |
headerText | string | Encabezado opcional | |
footerText | string | Pie 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)
/messages/wpp/send/button/url
/messages/wpp/send/button/url
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | Número destino | |
bodyText | string | Texto principal | |
url | string | Url a enviar | |
buttonLabel | string | Texto para url | |
headerType | string | Tipo de header opcional | |
headerText | string | Encabezado opcional para tipo "text" | |
headerLink | string | Encabezado opcional para tipos: "image", "document", "video" | |
footerText | string | Pie 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
/messages/wpp/send/template
/messages/wpp/send/template
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | Número destino | |
template | string | Nombre del template | |
params | array | Pará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
/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
/templates/find/by/name
/templates/find/by/name
{
"template": "nombre_template"
}Cambiar el estado del diálogo: De BOT a AI
/assistance/mode
/assistance/mode
Body (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | Número destino | |
mode | string | Estado del asistente: "MANUAL" o "AUTOMATIC" | |
linker | string |
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
/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:
todebe 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
