mirlo

Broadcasts

Envio masivo de mensajes por WhatsApp

Guia Rapida

  1. Obtener tu organization_id y organization_address (ver Getting Started)
  2. Obtener templates disponibles — GET .../whatsapp-management/templates
  3. Crear el broadcast — POST .../broadcasts
  4. Enviar el broadcast — POST .../broadcasts/{id}/send
  5. Monitorear el progreso — GET .../broadcasts/{id}

Todos los endpoints bajo https://api.mirlo.com/v2/messages/organizations/{organization_id}

Crear Broadcast

Template SIN Variables

curl -X POST "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Campaña Enero 2026",
    "organization_address": "100000000000001",
    "meta_template_id": "111222333444555",
    "recipients": [
      {"phone_number": "+521234567890"},
      {"phone_number": "+521234567891"}
    ]
  }'

Template CON Variables (ejemplo cobranza)

Cada destinatario recibe un mensaje personalizado con sus propias variables:

curl -X POST "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Cobranza Enero 2026",
    "organization_address": "100000000000001",
    "meta_template_id": "555666777888999",
    "recipients": [
      {
        "phone_number": "+521234567890",
        "components": [
          {
            "type": "body",
            "parameters": [
              {"type": "text", "parameter_name": "nombre_cliente", "text": "Juan Perez"},
              {"type": "text", "parameter_name": "mes", "text": "Enero"},
              {"type": "text", "parameter_name": "monto", "text": "$599.00"},
              {"type": "text", "parameter_name": "link", "text": "https://pay.mirlo.com/abc123"}
            ]
          }
        ]
      },
      {
        "phone_number": "+521234567891",
        "components": [
          {
            "type": "body",
            "parameters": [
              {"type": "text", "parameter_name": "nombre_cliente", "text": "Maria Garcia"},
              {"type": "text", "parameter_name": "mes", "text": "Enero"},
              {"type": "text", "parameter_name": "monto", "text": "$799.00"},
              {"type": "text", "parameter_name": "link", "text": "https://pay.mirlo.com/def456"}
            ]
          }
        ]
      }
    ]
  }'

Template con Variables en HEADER y BODY

Si tu template tiene variables tanto en el header como en el body, incluye ambos componentes por recipient:

{
  "phone_number": "+521234567890",
  "components": [
    {
      "type": "header",
      "parameters": [
        {"type": "text", "parameter_name": "nombre_cliente", "text": "Juan Perez"}
      ]
    },
    {
      "type": "body",
      "parameters": [
        {"type": "text", "parameter_name": "producto", "text": "iPhone 15"},
        {"type": "text", "parameter_name": "fecha_entrega", "text": "25 de Enero"}
      ]
    }
  ]
}

Response

{
  "id": "12345678-abcd-1234-efgh-123456789abc",
  "organization_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "organization_address": "100000000000001",
  "name": "Cobranza Enero 2026",
  "status": "draft",
  "recipients_added": 3,
  "recipients_duplicates": 0
}

El broadcast se crea en estado draft. Guarda el id para enviarlo en el siguiente paso.

Enviar Broadcast

curl -X POST "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts/12345678-abcd-1234-efgh-123456789abc/send" \
  -H "X-API-Key: sk_live_tu_api_key"

Response:

{
  "broadcast": {
    "id": "12345678-abcd-1234-efgh-123456789abc",
    "status": "sending",
    "started_at": "2026-01-22T18:46:17.030Z",
    "phone_number": "+52 1 55 1234 5678"
  },
  "template": {
    "name": "bienvenida_cliente",
    "status": "APPROVED",
    "category": "MARKETING"
  }
}

Monitorear Progreso

Estado del Broadcast

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts/12345678-abcd-1234-efgh-123456789abc" \
  -H "X-API-Key: sk_live_tu_api_key"
EstadoDescripcion
draftCreado, esperando envio
pendingListo para enviar
sendingEnviando mensajes
completedTodos los mensajes procesados
failedError en el envio

Estado de los Recipients

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts/12345678-abcd-1234-efgh-123456789abc/recipients" \
  -H "X-API-Key: sk_live_tu_api_key"
EstadoDescripcion
pendingMensaje en cola, aun no enviado
sentEnviado a WhatsApp
deliveredEntregado al dispositivo
readLeido por el destinatario
failedError en el envio
repliedEl destinatario respondio

Paginacion

GET .../broadcasts y GET .../broadcasts/{id}/recipients son paginados.

ParametroTipoDescripcion
skipnumberRegistros a saltar. Default: 0
takenumberRegistros a retornar. Default: 100

Los parametros se llaman skip y take. Enviar limit u offset responde 400 "property limit should not exist".

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts?skip=100&take=50" \
  -H "X-API-Key: sk_live_tu_api_key"

Response:

{
  "data": [ ... ],
  "total": 347,
  "skip": 100,
  "take": 50
}

total es la cantidad de registros que cumplen el filtro, no los devueltos en esta pagina: con el podes saber si quedan mas por recorrer.

Filtros del listado

ParametroTipoDescripcion
statusstringdraft, pending, sending, completed o failed
created_bystringMember ID del creador (ver .../broadcasts/creators)
include_metricsbooleanAgrega metricas por broadcast (entregados, respuestas, avance)

Agregar Mas Recipients

Si necesitas agregar mas destinatarios a un broadcast en estado draft:

curl -X POST "https://api.mirlo.com/v2/messages/organizations/{organization_id}/broadcasts/{id}/recipients" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "recipients": [
      {
        "phone_number": "+521234567893",
        "components": [
          {
            "type": "body",
            "parameters": [
              {"type": "text", "parameter_name": "nombre_cliente", "text": "Carlos Lopez"}
            ]
          }
        ]
      }
    ]
  }'

Maximo 1000 recipients por request. Puedes hacer multiples requests para agregar mas.

Asignacion a un Miembro

assigned_member_id asigna las conversaciones que genere el broadcast a un miembro del equipo.

Solo acepta miembros humanos. Pasar el ID de un agente de IA responde 400: las respuestas a una campana entran a la bandeja de un humano, no al agente.

Referencia de Endpoints

Todos bajo https://api.mirlo.com/v2/messages/organizations/{organization_id}

MetodoEndpointDescripcion
POST.../broadcastsCrear broadcast
GET.../broadcastsListar broadcasts
GET.../broadcasts/{id}Obtener broadcast
GET.../broadcasts/{id}/fullBroadcast con recipients y template
PATCH.../broadcasts/{id}Actualizar (solo draft)
DELETE.../broadcasts/{id}Eliminar (solo draft)
POST.../broadcasts/{id}/recipientsAgregar recipients
GET.../broadcasts/{id}/recipientsListar recipients
POST.../broadcasts/{id}/sendEnviar broadcast

En esta pagina