string
required
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "button",
"body": {
"text": "¿Qué te gustaría hacer hoy?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "ver_menu",
"title": "Ver Menú"
}
},
{
"type": "reply",
"reply": {
"id": "hacer_pedido",
"title": "Hacer Pedido"
}
},
{
"type": "reply",
"reply": {
"id": "hablar_agente",
"title": "Hablar con Agente"
}
}
]
}
}
}'
const response = await fetch('https://api.whaapy.com/messages/v1', {
method: 'POST',
headers: {
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '+5215512345678',
type: 'interactive',
interactive: {
type: 'button',
body: {
text: '¿Qué te gustaría hacer hoy?'
},
action: {
buttons: [
{
type: 'reply',
reply: { id: 'ver_menu', title: 'Ver Menú' }
},
{
type: 'reply',
reply: { id: 'hacer_pedido', title: 'Hacer Pedido' }
},
{
type: 'reply',
reply: { id: 'hablar_agente', title: 'Hablar con Agente' }
}
]
}
}
})
});
import requests
response = requests.post(
'https://api.whaapy.com/messages/v1',
headers={
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
json={
'to': '+5215512345678',
'type': 'interactive',
'interactive': {
'type': 'button',
'body': {
'text': '¿Qué te gustaría hacer hoy?'
},
'action': {
'buttons': [
{'type': 'reply', 'reply': {'id': 'ver_menu', 'title': 'Ver Menú'}},
{'type': 'reply', 'reply': {'id': 'hacer_pedido', 'title': 'Hacer Pedido'}},
{'type': 'reply', 'reply': {'id': 'hablar_agente', 'title': 'Hablar con Agente'}}
]
}
}
}
)
{
"messaging_product": "whatsapp",
"contacts": [
{ "input": "+5215512345678", "wa_id": "5215512345678" }
],
"messages": [
{ "id": "550e8400-e29b-41d4-a716-446655440000", "wamid": "wamid.HBgLNTIxNTUx..." }
],
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"conversationId": "660e8400-e29b-41d4-a716-446655440001",
"messageType": "interactive",
"direction": "outbound",
"status": "sent",
"createdAt": "2026-01-22T10:30:00Z"
}
}
Envía botones, listas y flows interactivos por WhatsApp
curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "button",
"body": {
"text": "¿Qué te gustaría hacer hoy?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "ver_menu",
"title": "Ver Menú"
}
},
{
"type": "reply",
"reply": {
"id": "hacer_pedido",
"title": "Hacer Pedido"
}
},
{
"type": "reply",
"reply": {
"id": "hablar_agente",
"title": "Hablar con Agente"
}
}
]
}
}
}'
const response = await fetch('https://api.whaapy.com/messages/v1', {
method: 'POST',
headers: {
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '+5215512345678',
type: 'interactive',
interactive: {
type: 'button',
body: {
text: '¿Qué te gustaría hacer hoy?'
},
action: {
buttons: [
{
type: 'reply',
reply: { id: 'ver_menu', title: 'Ver Menú' }
},
{
type: 'reply',
reply: { id: 'hacer_pedido', title: 'Hacer Pedido' }
},
{
type: 'reply',
reply: { id: 'hablar_agente', title: 'Hablar con Agente' }
}
]
}
}
})
});
import requests
response = requests.post(
'https://api.whaapy.com/messages/v1',
headers={
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
json={
'to': '+5215512345678',
'type': 'interactive',
'interactive': {
'type': 'button',
'body': {
'text': '¿Qué te gustaría hacer hoy?'
},
'action': {
'buttons': [
{'type': 'reply', 'reply': {'id': 'ver_menu', 'title': 'Ver Menú'}},
{'type': 'reply', 'reply': {'id': 'hacer_pedido', 'title': 'Hacer Pedido'}},
{'type': 'reply', 'reply': {'id': 'hablar_agente', 'title': 'Hablar con Agente'}}
]
}
}
}
)
{
"messaging_product": "whatsapp",
"contacts": [
{ "input": "+5215512345678", "wa_id": "5215512345678" }
],
"messages": [
{ "id": "550e8400-e29b-41d4-a716-446655440000", "wamid": "wamid.HBgLNTIxNTUx..." }
],
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"conversationId": "660e8400-e29b-41d4-a716-446655440001",
"messageType": "interactive",
"direction": "outbound",
"status": "sent",
"createdAt": "2026-01-22T10:30:00Z"
}
}
curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "button",
"body": {
"text": "¿Qué te gustaría hacer hoy?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "ver_menu",
"title": "Ver Menú"
}
},
{
"type": "reply",
"reply": {
"id": "hacer_pedido",
"title": "Hacer Pedido"
}
},
{
"type": "reply",
"reply": {
"id": "hablar_agente",
"title": "Hablar con Agente"
}
}
]
}
}
}'
const response = await fetch('https://api.whaapy.com/messages/v1', {
method: 'POST',
headers: {
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '+5215512345678',
type: 'interactive',
interactive: {
type: 'button',
body: {
text: '¿Qué te gustaría hacer hoy?'
},
action: {
buttons: [
{
type: 'reply',
reply: { id: 'ver_menu', title: 'Ver Menú' }
},
{
type: 'reply',
reply: { id: 'hacer_pedido', title: 'Hacer Pedido' }
},
{
type: 'reply',
reply: { id: 'hablar_agente', title: 'Hablar con Agente' }
}
]
}
}
})
});
import requests
response = requests.post(
'https://api.whaapy.com/messages/v1',
headers={
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
json={
'to': '+5215512345678',
'type': 'interactive',
'interactive': {
'type': 'button',
'body': {
'text': '¿Qué te gustaría hacer hoy?'
},
'action': {
'buttons': [
{'type': 'reply', 'reply': {'id': 'ver_menu', 'title': 'Ver Menú'}},
{'type': 'reply', 'reply': {'id': 'hacer_pedido', 'title': 'Hacer Pedido'}},
{'type': 'reply', 'reply': {'id': 'hablar_agente', 'title': 'Hablar con Agente'}}
]
}
}
}
)
{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "text",
"text": "🍕 Pizzería Whaapy"
},
"body": {
"text": "¡Bienvenido! ¿En qué podemos ayudarte?"
},
"footer": {
"text": "Responde con un botón"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": { "id": "menu", "title": "Ver Menú" }
},
{
"type": "reply",
"reply": { "id": "pedido", "title": "Mi Pedido" }
}
]
}
}
}
{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "image",
"image": {
"link": "https://example.com/promo.jpg"
}
},
"body": {
"text": "¡Promoción especial! 2x1 en pizzas familiares."
},
"action": {
"buttons": [
{
"type": "reply",
"reply": { "id": "aprovechar", "title": "¡Quiero!" }
},
{
"type": "reply",
"reply": { "id": "mas_info", "title": "Más Info" }
}
]
}
}
}
"button" para reply buttons.text, image, video, o document.type: "reply" y objeto reply con id y title.{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "list",
"body": {
"text": "Elige una opción de nuestro menú:"
},
"action": {
"button": "Ver Opciones",
"sections": [
{
"title": "Pizzas",
"rows": [
{
"id": "pizza_margarita",
"title": "Margarita",
"description": "Tomate, mozzarella, albahaca - $150"
},
{
"id": "pizza_pepperoni",
"title": "Pepperoni",
"description": "Pepperoni, mozzarella - $180"
}
]
},
{
"title": "Bebidas",
"rows": [
{
"id": "bebida_refresco",
"title": "Refresco",
"description": "Coca-Cola, Sprite, Fanta - $35"
},
{
"id": "bebida_agua",
"title": "Agua",
"description": "Natural o mineral - $25"
}
]
}
]
}
}
}
{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "list",
"header": {
"type": "text",
"text": "🍕 Menú Pizzería Whaapy"
},
"body": {
"text": "Tenemos las mejores pizzas de la ciudad. ¡Elige tu favorita!"
},
"footer": {
"text": "Envío gratis en pedidos mayores a $300"
},
"action": {
"button": "Ver Menú",
"sections": [
{
"title": "Pizzas Clásicas",
"rows": [
{
"id": "margarita",
"title": "Margarita",
"description": "Tomate, mozzarella, albahaca fresca"
},
{
"id": "pepperoni",
"title": "Pepperoni",
"description": "Pepperoni premium, mozzarella"
},
{
"id": "hawaiana",
"title": "Hawaiana",
"description": "Jamón, piña, mozzarella"
}
]
},
{
"title": "Pizzas Especiales",
"rows": [
{
"id": "4_quesos",
"title": "4 Quesos",
"description": "Mozzarella, parmesano, gorgonzola, provolone"
},
{
"id": "bbq_chicken",
"title": "BBQ Chicken",
"description": "Pollo, salsa BBQ, cebolla caramelizada"
}
]
}
]
}
}
}
"list" para list messages.type: "text" en listas.curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "cta_url",
"body": {
"text": "¡Tu pedido #12345 está listo! Haz seguimiento en tiempo real."
},
"action": {
"name": "cta_url",
"parameters": {
"display_text": "Rastrear Pedido",
"url": "https://mitienda.com/tracking/12345"
}
}
}
}'
const response = await fetch('https://api.whaapy.com/messages/v1', {
method: 'POST',
headers: {
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '+5215512345678',
type: 'interactive',
interactive: {
type: 'cta_url',
body: {
text: '¡Tu pedido #12345 está listo! Haz seguimiento en tiempo real.'
},
action: {
name: 'cta_url',
parameters: {
display_text: 'Rastrear Pedido',
url: 'https://mitienda.com/tracking/12345'
}
}
}
})
});
import requests
response = requests.post(
'https://api.whaapy.com/messages/v1',
headers={
'Authorization': 'Bearer wha_TU_API_KEY',
'Content-Type': 'application/json'
},
json={
'to': '+5215512345678',
'type': 'interactive',
'interactive': {
'type': 'cta_url',
'body': {
'text': '¡Tu pedido #12345 está listo! Haz seguimiento en tiempo real.'
},
'action': {
'name': 'cta_url',
'parameters': {
'display_text': 'Rastrear Pedido',
'url': 'https://mitienda.com/tracking/12345'
}
}
}
}
)
{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "cta_url",
"header": {
"type": "text",
"text": "🛒 Mi Tienda Online"
},
"body": {
"text": "Aprovecha nuestras ofertas de temporada con hasta 50% de descuento en productos seleccionados."
},
"footer": {
"text": "Oferta válida hasta agotar existencias"
},
"action": {
"name": "cta_url",
"parameters": {
"display_text": "Ver Ofertas",
"url": "https://mitienda.com/ofertas"
}
}
}
}
{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "cta_url",
"header": {
"type": "image",
"image": {
"link": "https://example.com/promo-banner.jpg"
}
},
"body": {
"text": "Nueva colección disponible. ¡Sé el primero en verla!"
},
"action": {
"name": "cta_url",
"parameters": {
"display_text": "Comprar Ahora",
"url": "https://mitienda.com/nueva-coleccion"
}
}
}
}
"cta_url".text, image, video, o document."cta_url".https://.id seleccionado:
{
"type": "interactive",
"interactive": {
"type": "button_reply",
"button_reply": {
"id": "hacer_pedido",
"title": "Hacer Pedido"
}
}
}
{
"type": "interactive",
"interactive": {
"type": "list_reply",
"list_reply": {
"id": "pizza_pepperoni",
"title": "Pepperoni",
"description": "Pepperoni, mozzarella - $180"
}
}
}
{
"type": "interactive",
"interactive": {
"type": "nfm_reply",
"nfm_reply": {
"name": "booking_flow",
"body": "Sucursal Centro · 2026-03-10 16:00",
"response_json": "{\"screen\":\"BOOK_APPOINTMENT\",\"values\":{\"branch\":\"Sucursal Centro\",\"slot\":\"2026-03-10 16:00\",\"service\":\"demo\"}}"
}
}
}
"confirmar_pedido_12345" para facilitar el procesamiento en tu backend.{
"messaging_product": "whatsapp",
"contacts": [
{ "input": "+5215512345678", "wa_id": "5215512345678" }
],
"messages": [
{ "id": "550e8400-e29b-41d4-a716-446655440000", "wamid": "wamid.HBgLNTIxNTUx..." }
],
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"conversationId": "660e8400-e29b-41d4-a716-446655440001",
"messageType": "interactive",
"direction": "outbound",
"status": "sent",
"createdAt": "2026-01-22T10:30:00Z"
}
}
| Elemento | Límite |
|---|---|
| Botones por mensaje | 3 |
| Secciones en lista | 10 |
| Rows totales en lista | 10 |
| Caracteres en body | 1024 |
| Caracteres en título de botón | 20 |
| Caracteres en display_text (CTA URL) | 30 |
| Caracteres en título de row | 24 |
| Caracteres en descripción de row | 72 |
| Caracteres en footer | 60 |
| Aspecto | Botones | Listas | CTA URL |
|---|---|---|---|
| Opciones máximas | 3 | 10 | 1 (un solo botón) |
| Visibilidad | Siempre visibles | Requiere tap para expandir | Siempre visible |
| Header con imagen | Sí | No (solo texto) | Sí |
| Descripciones | No | Sí | No |
| Organización | Flat | Secciones | Botón único |
| Webhook al responder | Sí (button_reply) | Sí (list_reply) | No (abre navegador) |
| Mejor para | Decisiones rápidas | Catálogos, menús | Links externos, pagos |
Confirmación de pedido
{
"type": "button",
"body": { "text": "Tu pedido #12345 está listo. ¿Confirmamos envío?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "confirmar", "title": "Confirmar" } },
{ "type": "reply", "reply": { "id": "modificar", "title": "Modificar" } },
{ "type": "reply", "reply": { "id": "cancelar", "title": "Cancelar" } }
]
}
}
Selección de horario
{
"type": "list",
"body": { "text": "Selecciona tu horario de entrega preferido:" },
"action": {
"button": "Ver Horarios",
"sections": [
{
"title": "Mañana",
"rows": [
{ "id": "9am", "title": "9:00 - 11:00 AM" },
{ "id": "11am", "title": "11:00 - 1:00 PM" }
]
},
{
"title": "Tarde",
"rows": [
{ "id": "2pm", "title": "2:00 - 4:00 PM" },
{ "id": "4pm", "title": "4:00 - 6:00 PM" }
]
}
]
}
}
Encuesta de satisfacción
{
"type": "button",
"body": { "text": "¿Cómo calificarías tu experiencia con nosotros?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "excelente", "title": "😊 Excelente" } },
{ "type": "reply", "reply": { "id": "buena", "title": "🙂 Buena" } },
{ "type": "reply", "reply": { "id": "mejorar", "title": "😕 Puede mejorar" } }
]
}
}
Link de pago (CTA URL)
{
"type": "cta_url",
"body": { "text": "Tu pedido #12345 por $350 MXN está confirmado. Completa el pago en el siguiente enlace:" },
"footer": { "text": "Link válido por 24 horas" },
"action": {
"name": "cta_url",
"parameters": {
"display_text": "Pagar Ahora",
"url": "https://mitienda.com/pago/12345"
}
}
}
Catálogo web (CTA URL)
{
"type": "cta_url",
"header": {
"type": "image",
"image": { "link": "https://example.com/catalogo-preview.jpg" }
},
"body": { "text": "Explora nuestro catálogo completo con más de 200 productos disponibles." },
"action": {
"name": "cta_url",
"parameters": {
"display_text": "Ver Catálogo",
"url": "https://mitienda.com/catalogo"
}
}
}
type: "interactive" con interactive.type: "flow".
{
"to": "+5215512345678",
"type": "interactive",
"interactive": {
"type": "flow",
"header": {
"type": "text",
"text": "Reserva tu cita"
},
"body": {
"text": "Completa este flujo para reservar tu cita en menos de 1 minuto."
},
"footer": {
"text": "Datos protegidos"
},
"action": {
"name": "flow",
"parameters": {
"flow_message_version": "3",
"flow_id": "123456789012345",
"flow_cta": "Abrir flow",
"flow_token": "lead_987654321",
"flow_action": "navigate",
"flow_action_payload": {
"screen": "BOOK_APPOINTMENT",
"data": {
"service": "demo",
"source": "api"
}
}
}
}
}
}
"flow"."flow"."3".flow_id o flow_name, pero no ambos.flow_id.navigate o data_exchange. Si no lo envías, Meta usa navigate.navigate.Was this page helpful?