Volver al blog
Desarrolladores

API de WhatsApp: Waspy vs 360dialog para desarrolladores en Argentina

Waspy usa Bearer wspy_ en /api/v2 e incluye el inbox. 360dialog, leído el 6/11, cobra por número (Regular €49 en la web) y manda con D360-API-KEY a waba-v2.360dialog.io. No publica tarifa de Argentina.

· 13 min
API de WhatsApp: Waspy vs 360dialog para desarrolladores en Argentina

Respuesta corta: si tu sistema manda WhatsApp desde Argentina, Waspy y 360dialog no se llaman igual. Waspy es POST https://api.waspytech.com/api/v2/messages con Authorization: Bearer wspy_.... 360dialog, en la guía de envío leída el 6 de noviembre de 2026, es POST https://waba-v2.360dialog.io/messages con el header D360-API-KEY. El inbox del equipo ya está en Waspy. En 360dialog, la página de precios lo lista en Premium, no en Regular.

La ficha corta está en Waspy vs 360dialog. La guía de intención está en alternativa a 360dialog. Esta nota es el contrato, con lo que el código y las páginas públicas dicen hoy. El cruce con Twilio, del jueves, está en Waspy vs Twilio.

Auth, base y qué se manda

Waspy360dialog, leído el 6/11
AuthAuthorization: Bearer wspy_.... La key se crea en el panel. AutenticaciónHeader D360-API-KEY. La guía dice que sin esa key el pedido se rechaza
Basehttps://api.waspytech.com/api/v2https://waba-v2.360dialog.io
Textotype: "text", text.body. Solo con ventana de 24 h abierta. Si no, 403 SERVICE_WINDOW_EXPIREDLa guía manda messaging_product, recipient_type, to, type: "text" y text.body. El to del ejemplo es el placeholder PHONE_NUMBER: no copio un E.164 argentino que esa página no muestra
Plantillatype: "template", template.name + language.code + componentsEl mismo nombre de campos en el ejemplo hello_world / en_US. La referencia (OpenAPI 1.52.4) exige language y name
Mediaimage, video, audio o document, con link https o id de Meta. No hay POST /api/v2/mediaLa referencia lista image, audio, video, document y sticker, con id o link
WebhooksAlta en /api/v2/webhooks. Eventos: message.received, message.status_changed, conversation.created, contact.createdLa guía pide una URL https que responda 200, y nombra mensajes entrantes y estados sent, delivered, read. No copio el alta: dice que hay varias opciones y no pega el body
IdempotenciaHeader Idempotency-Key, máx. 256 caracteres, 24 h. Replay: Idempotency-Replayed: true. Choque: 409 IDEMPOTENCY_CONFLICTLa referencia Messages que leí no declara ese header
Tope de la API120 requests por minuto por cuenta en /api/v2No fijo un número de requests. La web de precios, en Scale, dice hasta 1.000 mensajes por segundo. Es otra unidad
El phoneNumberId de Waspy es el UUID del canal (GET /api/v2/channels), no el id de Meta. to va en E.164, por ejemplo +5491126032641, el número de los ejemplos de la doc.

Texto y plantilla en Waspy

Esto es el contrato de messages y de apps/api/src/routes/v2/messages.ts. El texto libre, si la ventana cerró, no se encola.

curl -sS -X POST https://api.waspytech.com/api/v2/messages \
  -H "Authorization: Bearer $WASPY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-1847-texto" \
  -d '{
    "phoneNumberId": "UUID-DEL-CANAL",
    "to": "+5491126032641",
    "type": "text",
    "text": { "body": "Hola. Tu pedido 1847 ya salió." }
  }'

La plantilla tiene que estar approved. Crearlas por POST /api/v2/templates no existe: se crean en el panel o con la herramienta MCP create_template. El envío sí es REST.

curl -sS -X POST https://api.waspytech.com/api/v2/messages \
  -H "Authorization: Bearer $WASPY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-1847-confirmacion" \
  -d '{
    "phoneNumberId": "UUID-DEL-CANAL",
    "to": "+5491126032641",
    "type": "template",
    "template": {
      "name": "confirmacion_pedido",
      "language": { "code": "es_AR" },
      "components": [
        {
          "type": "body",
          "parameters": [
            { "type": "text", "text": "María" },
            { "type": "text", "text": "1847" }
          ]
        }
      ]
    }
  }'

El 201 trae data.status: "queued" y waMessageId: null. El id de Meta llega después, en el webhook message.status_changed o en GET /api/v2/messages/:id. El detalle está en la API para desarrolladores y en enviar una plantilla. Los scopes están en scopes: messages:write para enviar. Una clave sin lista de scopes entra a todo. Si le falta el permiso, es 403 FORBIDDEN.

El mismo envío del lado de 360dialog

La guía publica este curl para una plantilla. Lo dejo con el placeholder que usa esa página:

curl -X POST https://waba-v2.360dialog.io/messages \
  -H "D360-API-KEY: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "PHONE_NUMBER",
    "type": "template",
    "template": {
      "name": "hello_world",
      "language": { "code": "en_US" }
    }
  }'

El cuerpo se parece al de la Cloud API de Meta (messaging_product, type, template.name). El host no es graph.facebook.com: es waba-v2.360dialog.io. La referencia agrega recipient_type (individual o group) entre los campos requeridos del schema, y acepta recipient como alternativa a to cuando el negocio usa BSUID. Un 403 de esa referencia puede ser insufficient_balance.

La guía dice que el texto libre solo sale con la ventana de atención abierta, y también que una plantilla entregada abre esa ventana. En Waspy no opero con esa segunda frase: el texto libre sale si el cliente escribió y la ventana sigue abierta. Si no, el POST responde 403 SERVICE_WINDOW_EXPIRED.

Precios: la licencia, Meta y la Argentina

Hay dos tablas, leídas el mismo día. No las junto en un solo número.

Fuente del 6/11/2026Qué publica
360dialog.com/pricing, vista en eurosRegular €49, Premium €99, Scale €500, por número y por mes, más “Meta WhatsApp Messaging Fees”. Marketplace, aparte, €99 por número. La plataforma de partners es otra grilla (€250 + €49 por canal en Starter)
docs.360dialog.com, PricingRegular 49 EUR / 59 USD, Premium 99 EUR / 119 USD, Higher Throughput 249 EUR / 299 USD. Factura en EUR o USD. No aparece la fila Scale de €500
Ninguna de las dos imprime un precio en pesos ni una fila “Argentina”. Si buscás la tarifa de un mensaje a un celular argentino, esa página no la da. La que usamos para el destinatario en Argentina es la rate card de Meta, vigente desde el 1 de octubre de 2026:
CategoríaPesosDólares
MarketingARS 89,56US$0,0618
UtilidadARS 37,68US$0,026
AutenticaciónARS 37,68US$0,026
Servicio1.000 por número y por mes; después ARS 37,68Después US$0,026
La doc de precios de 360dialog dice que el uso sigue las rate cards de Meta, y que mandar marketing por el endpoint estándar de mensajes (en vez de la Marketing Messages API) suma un 7 % sobre la tarifa de Meta. La referencia de /messages dice que puede rutear al endpoint de marketing cuando aplica. No traduzco las dos frases a “siempre hay 7 %” ni a “nunca hay 7 %”. El párrafo de servicio de esa doc cobra por mensaje, alineado a utilidad, con la excepción del free entry point, y no menciona las 1.000 de la rate card. Para presupuestar Argentina, manda la de desarrolladores de Meta.

Waspy no agrega un fee por mensaje. Meta te factura directo. La plataforma arranca en US$70 por mes (Starter). Growth es US$100. La clave wspy_ entra en Scale (US$150) y Enterprise. Diez días sin tarjeta, en el registro. Los planes están en Planes y el producto, en la API. El desglose de Meta está en precios de la API.

Inbox, 120 por minuto y quién responde

Rate limits describe 120 req/min. El servidor, en app.ts, aplica max: 120 con clave v2: + el id de la cuenta. Todas las keys comparten el cupo. El 429 es RATE_LIMITED, con Retry-After. El reintento está en rate limits y reintentos.

En la web de 360dialog, Regular lista soporte, SLA de primera respuesta en menos de 4 horas, y Zapier, Make y n8n. Premium suma SLA de 30 minutos, verificación del negocio en 48 horas, Messaging MCP, y los complementos Inbox, Sendout y Automation. Scale, en esa misma página, llega a 1.000 mensajes por segundo. El inbox de Waspy no es un complemento: está desde Starter. La API pública, no: entra en Scale y Enterprise.

La API no reemplaza la bandeja. Quien atiende el “¿salió?” es el equipo. Un chatbot de pasos puede mandar un menú y derivar; no contesta esa pregunta ni inicia el chat. Si conectás un modelo de afuera, es tu integración, por esta API o por MCP, y el mensaje al cliente lo confirma una persona o lo manda tu sistema con la plantilla que ya aprobaste.

La referencia de Waspy está en docs.waspytech.com.

Tu equipo atendiendo por WhatsApp en minutos

CRM facil pero potente. En 10 minutos tenes a tu equipo trabajando — no necesitas hablar con nadie.