Download OpenAPI specification:Download
API de integración de envío OMNICANAL: una misma campaña puede salir por SMS, RCS, Email, WhatsApp, Voz y Push con una lista ORDENADA de canales. Cada destinatario recibe el mensaje por el primer canal de la lista; si la entrega falla, el sistema lo reintenta automáticamente por el siguiente canal, sin intervención del integrador.
En su cuenta de usuario encontrará el Usuario API y el API Token, ambos son necesarios para realizar las peticiones API REST a las funciones de la API. Las Peticiones, por seguridad deben realizarse en POST y con protocolo HTTPS Seguro.
Para utilizar la Autenticación Básica debe incluir una cabecera en las peticiones del tipo: Authorization: Basic Base64StringAPI donde Base64StringAPI es la codificación en Base64 de la cadena UsuarioAPI:APIToken, puede encontrar su Usuario API y API Token en su cuenta de usuario en Tus Datos -> Configurar Cuenta.
Para generar el string codificado en Base64, simplemente genere el string UsuarioApi:APIToken y codifíquelo en base64 mediante cualquier función base64encode.
Requisitos por canal:
Cada canal que incluya en la campaña debe estar disponible en su cuenta:
- SMS: siempre disponible. Indique REMITENTE y MENSAJE (admite variables {{NOMBRE}} y links).
- RCS: requiere un Agente RCS activo (IDAGENTE) y una plantilla RCS creada en el panel (IDPLANTILLA).
- WhatsApp: requiere una cuenta WhatsApp Business conectada, un teléfono (IDTELEFONO) y una plantilla APROBADA por Meta (IDPLANTILLA = nombre de la plantilla).
- Email: requiere un DOMINIO propio VALIDADO en su cuenta (no se envía con dominio por defecto), un ASUNTO (obligatorio) y una plantilla (IDPLANTILLA) o un MENSAJEEMAIL. Opcionalmente NOMBREREMITENTE, el nombre que verá el destinatario junto a la dirección; si no se indica, se muestra la propia dirección. Opcionalmente REPLYTO, la dirección (de cualquier dominio) a la que llegarán las respuestas del destinatario; si no se indica, las respuestas van al REMITENTE.
- Voz: llamada con locución Text-to-Speech. Requiere un número propio ACTIVO como REMITENTE (solicitado en el panel), el MENSAJE a locutar y opcionalmente LENGUAJE (idioma del TTS, p.ej. es) y DETECTARCONTESTADOR.
- Push: aviso a los dispositivos vinculados desde el panel (sección Avisos). El destino es el ALIAS del dispositivo: fijo en el canal (REF) o por destinatario (variable REFPUSH en sus VARIABLES). Sin alias, el canal se salta para ese destinatario — nunca se avisa "a todos los aparatos de la cuenta".
Servicio 2FA/OTP: Si lo que necesita es enviar y validar códigos de un solo uso, use la API específica de 2FA/OTP (misma cascada de canales más generación, validación, webhook de estados y anti-abuso). Las peticiones OTP aparecen en el panel en este mismo listado de campañas, etiquetadas como OTP y con su propio filtro.
Validación en PREPRODUCCIÓN: Antes de pasar a producción, realice llamadas con VALIDARCANALES=SI: el sistema verifica la configuración real de cada canal (plantillas en base de datos, dominio validado, teléfono y plantillas aprobadas en Meta...) y devuelve un error descriptivo (Res -4) si algo no está correctamente configurado. Esta validación añade latencia y tiene un límite de peticiones por minuto: en producción use siempre VALIDARCANALES=NO.
Cascada de reintento:
El estado de entrega de cada canal lo notifica el propio operador. Cuando un canal reporta un fallo definitivo de entrega para un destinatario, el sistema reintenta automáticamente por el siguiente canal de la lista que no haya fallado ya para ese destino. Puede seguir el estado de cada destinatario (pendiente, enviado, entregado, leído, reenviado por otro canal, fallido) en el panel, en Envío Omnicanal → Campañas y Estadísticas.
Variables:
Las variables de las plantillas ({{NOMBRE}}, {{CODIGO}}...) se envían por destinatario en el array VARIABLES. Los nombres no distinguen mayúsculas de minúsculas.
Respuesta de las peticiones:
La mayoría de las funciones disponen de un parámetro denominado 'Resp'. Este parámetro define el formato de la respuesta que se devolverá. Puede ser TXT, JSON o XML. Se recomienda siempre definir este parámetro.
Autenticación HTTP Basic. Use su Usuario API como usuario y su API Token como contraseña (los encuentra en su panel, en Tus Datos → Configurar Cuenta). El header resultante es Authorization: Basic base64(UsuarioAPI:APIToken). La mayoría de las librerías HTTP lo construyen automáticamente (curl -u, requests auth=, basic_auth de Ruby, etc.) sin necesidad de codificar el base64 a mano.
basicCrea y lanza una campaña omnicanal: define la lista ORDENADA de canales (CANALES) y los destinatarios (DESTINATARIOS). Cada destinatario sale por el primer canal; si su entrega falla, el sistema reintenta automáticamente por el siguiente canal de la lista.
ATENCIÓN: use VALIDARCANALES=SI en preproducción para verificar la configuración de los canales antes de enviar.
| Canales required | Array of strings Example: Canales=[{"Tipo":"sms","Remitente":"MIEMPRESA","Mensaje":"Hola {{NOMBRE}}, su pedido {{PEDIDO}} esta listo"},{"Tipo":"email","Dominio":"miempresa.com","Asunto":"Su pedido {{PEDIDO}}","MensajeEmail":"Hola {{NOMBRE}}, su pedido esta listo."}] Array JSON ORDENADO de canales. El orden define la cascada: el primer canal es el principal y el resto son los reintentos. Cada tipo de canal solo puede aparecer una vez. Campos por elemento:
|
| Destinatarios required | Array of strings Example: Destinatarios=[{"Nombre":"Pedro Aicart","Telefono":"34600000001","Email":"pedro@ejemplo.com","Variables":[{"Nombre":"PEDIDO","Valor":"A-1234"}]}] Array JSON con los destinatarios. Cada elemento admite
|
| Fecha | string Example: Fecha=2026-08-01 10:30 Fecha y hora de envío programado en formato YYYY-MM-DD HH:mm (CET/CEST). Si se omite o está vacía, el envío es inmediato. |
| Intervaloprohibido | Array of strings Example: Intervaloprohibido=[{"HoraInicio":"22:00","HoraFin":"09:00","Accion":"1"}] Intervalo horario en el que NO se debe entregar (array de un objeto con HoraInicio, HoraFin y Accion: 1=posponer, 2=cancelar). 00:00-00:00 = sin restricción. |
| Referenciausuario | string Example: Referenciausuario=Campania julio Referencia libre de la campaña para sus listados (máx. 50 caracteres). |
| Eliminarduplicados | string Enum: 0 1 Example: Eliminarduplicados=1 1 (por defecto) elimina destinatarios duplicados (mismo móvil o email) dentro de la campaña. 0 los mantiene. |
| Validarcanales | string Enum: "NO" "SI" Example: Validarcanales=NO SI = valida la configuración REAL de cada canal antes de crear la campaña (agente y plantilla RCS en su cuenta, dominio email validado y plantilla con HTML, cuenta WhatsApp Business con el teléfono registrado y la plantilla APROBADA en Meta). Pensado para PREPRODUCCIÓN: añade latencia y tiene límite de peticiones por minuto (Res -6 si se supera). En producción use NO. |
| Resp | string Enum: "TXT" "JSON" "XML" Example: Resp=JSON Tipo de respuesta a mostrar como resultado de la llamada.
|
Los parámetros se envían en el cuerpo de la petición POST, como objeto JSON (Content-Type application/json, RECOMENDADO) o como formulario application/x-www-form-urlencoded. En el formato formulario, los parámetros de tipo array u objeto se envían como string JSON-codificado. Los nombres de los parámetros no distinguen mayúsculas de minúsculas. La descripción detallada de cada parámetro está en la sección de parámetros de esta operación.
| Canales required | Array of any |
| Destinatarios required | Array of any |
| Fecha | string |
| Intervaloprohibido | Array of any |
| Referenciausuario | string |
| Eliminarduplicados | string |
| Validarcanales | string |
| Resp | string |
| Res required | integer <int32> Respuesta de la función solicitada
|
| Error | string En caso de Res negativo, descripción del problema. |
| idEnvio | integer Identificador de la campaña omnicanal (el mismo que Res cuando es correcto). |
| Destinatarios | integer Número de destinatarios procesados. |
| Alta | integer Destinatarios válidos dados de alta en la campaña. |
| Duplicados | integer Destinatarios descartados por duplicados (con ELIMINARDUPLICADOS=1). |
| Invalidos | integer Destinatarios descartados por no tener móvil ni email válidos. |
| Enviados | integer Destinatarios encolados en su primer canal (0 si la campaña queda programada). |
| Fallidos | integer Destinatarios en los que fallaron TODOS los canales al encolar. |
| Pendientes | integer Destinatarios que aún no se han intentado (campaña programada o parada por falta de saldo). |
| SinSaldo | integer 1 si el envío se detuvo por falta de créditos: los Pendientes quedan en espera y la campaña se reintenta automáticamente cada hora (hasta 7 días) en cuanto haya saldo. |
| CreditosUsados | number Créditos cobrados hasta ahora en esta campaña (suma de lo cobrado por cada mensaje encolado; solo se cobra el canal por el que realmente se envía cada intento). |
| Programado | integer 1 si la campaña quedó programada (FECHA futura); el envío lo lanzará el sistema automáticamente. |
| Cred | number Créditos disponibles en la cuenta tras la operación. |
{- "Canales": "[{\"Tipo\":\"sms\",\"Remitente\":\"MIEMPRESA\",\"Mensaje\":\"Hola {{NOMBRE}}, su pedido {{PEDIDO}} esta listo\"},{\"Tipo\":\"email\",\"Dominio\":\"miempresa.com\",\"Asunto\":\"Su pedido {{PEDIDO}}\",\"MensajeEmail\":\"Hola {{NOMBRE}}, su pedido esta listo.\"}]",
- "Destinatarios": "[{\"Nombre\":\"Pedro Aicart\",\"Telefono\":\"34600000001\",\"Email\":\"pedro@ejemplo.com\",\"Variables\":[{\"Nombre\":\"PEDIDO\",\"Valor\":\"A-1234\"}]}]",
- "Fecha": "2026-08-01 10:30",
- "Intervaloprohibido": "[{\"HoraInicio\":\"22:00\",\"HoraFin\":\"09:00\",\"Accion\":\"1\"}]",
- "Referenciausuario": "Campania julio",
- "Eliminarduplicados": "1",
- "Validarcanales": "NO",
- "Resp": "JSON"
}[- {
- "Res": "1024",
- "Error": "CANALES[1] EMAIL: ASUNTO is required",
- "idEnvio": "1024",
- "Destinatarios": "2",
- "Alta": "2",
- "Duplicados": "0",
- "Invalidos": "0",
- "Enviados": "2",
- "Fallidos": "0",
- "Pendientes": "0",
- "SinSaldo": "0",
- "CreditosUsados": "2.6",
- "Programado": "0",
- "Cred": "970.5"
}
]