MailLandDocs
Marketing

Automatizaciones

Configure secuencias de correo electrónico basadas en disparadores que se ejecutan automáticamente según el comportamiento del suscriptor

Las automatizaciones le permiten crear secuencias de correo electrónico de múltiples pasos disparadas por eventos de suscriptores. Defina un disparador, construya una secuencia de pasos y MailLand ejecuta el flujo automáticamente cada vez que se activa el disparador.

Disparadores de automatización

Cada automatización comienza con un único disparador:

DisparadorValorDescripción
SubscriberJoins0El suscriptor se agrega a una lista de correo
SubscriberUpdated1Se actualiza el perfil del suscriptor
CampaignOpened2El suscriptor abre una campaña específica
CampaignClicked3El suscriptor hace clic en un enlace de una campaña
DateBased4Disparador solo de cumpleaños: evalúa Subscriber.Birthday (vea el aviso abajo)

DateBased solo evalúa Subscriber.Birthday, no un campo de fecha recurrente arbitrario. Birthday se puede establecer mediante POST/PUT /v1/marketing/subscribers (vea la página de Suscriptores) y también mediante la importación CSV, que acepta una columna birthday opcional, así que una automatización DateBased inscribe a cualquier suscriptor cuyo cumpleaños se haya establecido por cualquiera de las dos vías.

| Manual | 5 | Disparado manualmente vía API |

Estados de automatización

EstadoValorDescripción
Draft0Editable, no está en ejecución
Active1En ejecución: los nuevos suscriptores se inscriben al activarse el disparador
Paused2Pausada: sin nuevas inscripciones, y los pasos posteriores se detienen para los suscriptores ya inscritos. Reactivarla (Active) reanuda cada inscripción exactamente donde se detuvo, y entrega todo lo que venció mientras estaba pausada
Archived3Archivada: oculta de las vistas predeterminadas. Al igual que Paused, esto detiene nuevas inscripciones; los pasos posteriores también se detienen para los suscriptores ya inscritos. No existe un endpoint para desarchivar, así que esta detención es permanente para esas inscripciones

Tipos de pasos

Cada automatización contiene una secuencia ordenada de pasos:

Tipo de pasoValorDescripción
SendEmail0Enviar un correo electrónico al suscriptor
Wait1Esperar una duración antes de continuar
Condition2Evalúa un campo del suscriptor; una puerta que continúa si es verdadero y termina la inscripción si es falso (vea el paso Condition más abajo)
AddToList3Agregar al suscriptor a una lista de correo
RemoveFromList4Eliminar al suscriptor de una lista de correo
UpdateSubscriber5Actualizar campos del suscriptor
Webhook6Enviar un webhook a una URL externa

Personalización

Los pasos de correo de automatización admiten etiquetas de fusión {{variable}}, sustituidas por destinatario a partir del propio registro del suscriptor inscrito.

EtiquetaValor
{{firstName}}Nombre del suscriptor
{{lastName}}Apellido del suscriptor
{{fullName}}Nombre y apellido unidos
{{email}}Dirección de correo del suscriptor
{{subscriberId}}Identificador opaco del suscriptor
{{custom_<field>}}Cualquier campo personalizado del suscriptor, también disponible como {{<field>}}
Paso de automatización personalizado
<p>Hi {{firstName}}, here's what's new this month.</p>

Una etiqueta sin valor se deja exactamente como está escrita: {{firstName}} para un suscriptor sin nombre permanece como {{firstName}} en el correo entregado. Escriba contenido que se lea correctamente en ambos casos. Use un saludo alternativo cuando no esté seguro de que todos los suscriptores tengan el campo.

Los valores se escapan según la parte en la que caen: el contenido HTML se escapa como HTML, mientras que el asunto y el cuerpo en texto plano nunca se escapan, Ben & Jerry's permanece exactamente así.

Las grafías antiguas en snake_case ({{first_name}}, {{last_name}}, {{full_name}}, {{subscriber_id}}) siguen funcionando como alias.

Crear una automatización

POST https://api.mail.land/v1/marketing/automations
Create automation request
{
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": 0,
  "mailingListId": "7h3n5k8w2q9m1t",
  "campaignId": null,
  "steps": [
    {
      "type": 0,
      "order": 1,
      "templateId": "2p9x4k7m3q8n1z",
      "subject": "Welcome to our newsletter!"
    },
    {
      "type": 1,
      "order": 2,
      "delayMinutes": 1440
    },
    {
      "type": 0,
      "order": 3,
      "templateId": "9k4p2x7m1q3n8z"
    }
  ]
}
CampoTipoObligatorioDescripción
namestringSíNombre de la automatización (único por espacio de trabajo)
descriptionstringNoDescripción de la automatización
triggerintSíTipo de disparador (consulte la tabla de disparadores)
mailingListIdstringNoLista de correo objetivo para el disparador
campaignIdstringNoOpcional para disparadores CampaignOpened / CampaignClicked: si se omite, el disparador se activa en cualquier campaña, no solo en una
stepsarraySíSecuencia ordenada de pasos

No existe un campo segmentId en una automatización: ese campo no existe aquí (los segmentos se usan en otro lugar, por ejemplo en las campañas). El contenido de un paso SendEmail proviene de templateId, no de htmlContent/textContent/fromName/fromEmail en línea.

campaignId es opcional para los disparadores de apertura/clic, no obligatorio como indicaban versiones anteriores de esta página. También se activa con aperturas automáticas (precarga de Apple Mail Privacy Protection, escáneres de seguridad de enlaces) que MailLand no filtra hoy.

Campos de los pasos

Cada paso tiene en realidad la forma { order, type, delayMinutes, templateId, subject, settings: {} }: no existe un segmentId a nivel de automatización, y los pasos no tienen los campos específicos de cada tipo mostrados en versiones anteriores de esta página (conditionField, targetMailingListId, updateField, webhookUrl, fromName, fromEmail, replyTo no son campos de nivel superior de un paso). Las tablas siguientes reflejan la forma real.

Paso SendEmail (type: 0):

CampoTipoObligatorioDescripción
typeintSí0
orderintSíPosición del paso en la secuencia
delayMinutesintNoMinutos a esperar antes de ejecutar este paso: incluso cuando es el primer paso: el retraso antes del primer envío ahora se respeta al inscribir (antes se ignoraba)
templateIdstringSíPlantilla que aporta el contenido del correo: el contenido proviene únicamente de la plantilla
subjectstringNoSobrescribe el asunto de la plantilla si se establece

No existe htmlContent/textContent/fromName/fromEmail/replyTo en línea en un paso. El remitente está fijado a noreply@<primer dominio totalmente verificado>, mostrado con el nombre del espacio de trabajo, no es configurable por paso.

templateId es obligatorio en todo paso SendEmail. Las solicitudes de creación/actualización sin él se rechazan con 400 VALIDATION_FAILED; un templateId que no resuelve a una plantilla de su tenant se rechaza con 400 TEMPLATE_NOT_FOUND: ambos antes de que se escriba nada. Si una plantilla se elimina después de guardar la automatización, la siguiente inscripción que llegue a ese paso se marca como Failed en lugar de omitir el paso silenciosamente, y cuenta para el totalFailed de la automatización (vea Obtener detalles de la automatización).

Paso Wait (type: 1):

CampoTipoObligatorioDescripción
typeintSí1
orderintSíPosición del paso
delayMinutesintSíMinutos a esperar antes del siguiente paso

Paso Condition (type: 2):

Un paso Condition es una puerta, no una bifurcación: una lista de pasos lineal no tiene un segundo camino. Cuando evalúa verdadero, la inscripción continúa al siguiente paso. Cuando evalúa falso, la inscripción termina ahí (Completed) y ningún paso posterior se ejecuta para ese suscriptor.

CampoTipoObligatorioDescripción
typeintSí2
orderintSíPosición del paso
settings.conditionFieldstringSíEl campo del suscriptor a evaluar: email, firstName, lastName, phone, company, source, o custom_<name> para un campo personalizado
settings.conditionOperatorstringSíequals, notEquals, contains, notContains, startsWith, endsWith, isEmpty, isNotEmpty (sin distinguir mayúsculas/minúsculas)
settings.conditionValuestringObligatorio salvo con isEmpty/isNotEmptyEl valor a comparar

Las comparaciones son comparaciones de cadenas sin distinguir mayúsculas/minúsculas, los mismos operadores que ya ofrecen los segmentos. Se devuelve 400 VALIDATION_FAILED al crear/actualizar cuando conditionField es desconocido, conditionOperator no es uno de los valores anteriores, o falta conditionValue para un operador que lo requiere.

Un paso Condition guardado antes de que existiera esta validación (cuyos settings por tanto no se pueden evaluar) sigue pasando sin cambios, por continuidad: solo se validan las nuevas solicitudes de creación/actualización.

Pasos AddToList / RemoveFromList (type: 3, 4):

CampoTipoObligatorioDescripción
typeintSí3 o 4
orderintSíPosición del paso
settings.mailingListIdstringSíLista de correo para agregar/eliminar al suscriptor, leída de settings

Paso UpdateSubscriber (type: 5):

CampoTipoObligatorioDescripción
typeintSí5
orderintSíPosición del paso
settingsobjectSíCada clave en settings se escribe como un campo personalizado en el suscriptor

Paso Webhook (type: 6):

CampoTipoObligatorioDescripción
typeintSí6
orderintSíPosición del paso
settings.urlstringSíURL a la que enviar la solicitud POST, leída de settings

Las solicitudes de los pasos Webhook se firman con un secreto del receptor del paso (X-MLND-Signature, se verifica como un webhook de cliente): cada URL de paso distinta tiene su propio secreto, así que ningún receptor puede firmar por otro. Léalos con GET /v1/marketing/automations/{id}/webhook-signing-secrets y renuévelos con POST /v1/marketing/automations/{id}/webhook-signing-secrets/regenerate, vea Versionado. Envíe { "webhookUrl": "…" } para renovar un solo receptor.

Create an automation
curl -X POST https://api.mail.land/v1/marketing/automations \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome Series",
    "trigger": 0,
    "mailingListId": "7h3n5k8w2q9m1t",
    "steps": [
      {
        "type": 0, "order": 1,
        "subject": "Welcome!",
        "templateId": "2p9x4k7m3q8n1z"
      },
      { "type": 1, "order": 2, "delayMinutes": 1440 },
      {
        "type": 0, "order": 3,
        "subject": "Getting started",
        "templateId": "9k4p2x7m1q3n8z"
      }
    ]
  }'

Respuesta

Automation response
{
  "id": "4f8k2m9p1q6z3s",
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": "subscriberJoins",
  "triggerName": "SubscriberJoins",
  "status": "draft",
  "statusName": "Draft",
  "mailingListId": "7h3n5k8w2q9m1t",
  "mailingListName": "Product Updates",
  "campaignId": null,
  "campaignName": null,
  "stepsCount": 3,
  "totalEnrolled": 0,
  "totalCompleted": 0,
  "activatedAt": null,
  "createdAt": "2026-02-17T12:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

No existe un campo segmentId/segmentName en una automatización, y los contadores de inscripción son totalEnrolled/totalCompleted (no totalEnrollments/activeEnrollments/completedEnrollments). La respuesta de detalle también agrega steps (la lista completa de pasos), completionRate y totalFailed: inscripciones que llegaron a un paso SendEmail sin plantilla en el tenant (ausente o eliminada desde entonces).

Listar automatizaciones

GET https://api.mail.land/v1/marketing/automations
ParámetroTipoPredeterminadoDescripción
cursorstring-Cursor opaco del nextCursor de la página anterior. Omitir para la primera página.
limitint20Elementos por página
searchstring-Buscar por nombre
statusint-Filtrar por estado de la automatización
triggerint-Filtrar por tipo de disparador
mailingListIdstring-Filtrar por lista de correo
sortBystring-Campo de ordenamiento
sortDescboolfalseOrden descendente
List automations
curl https://api.mail.land/v1/marketing/automations \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Obtener detalles de la automatización

GET https://api.mail.land/v1/marketing/automations/{id}

Devuelve la automatización completa incluyendo todos los pasos:

Get automation details
curl https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Automation detail response
{
  "id": "4f8k2m9p1q6z3s",
  "name": "Welcome Series",
  "description": "3-email welcome sequence for new subscribers",
  "trigger": "subscriberJoins",
  "triggerName": "SubscriberJoins",
  "status": "active",
  "statusName": "Active",
  "mailingListId": "7h3n5k8w2q9m1t",
  "mailingListName": "Product Updates",
  "campaignId": null,
  "campaignName": null,
  "stepsCount": 3,
  "totalEnrolled": 230,
  "totalCompleted": 200,
  "totalFailed": 4,
  "activatedAt": "2026-01-10T08:05:00Z",
  "steps": [
    {
      "order": 1,
      "type": "sendEmail",
      "typeName": "SendEmail",
      "delayMinutes": null,
      "templateId": "2p9x4k7m3q8n1z",
      "subject": "Welcome to our newsletter!",
      "settings": null
    },
    {
      "order": 2,
      "type": "wait",
      "typeName": "Wait",
      "delayMinutes": 1440,
      "templateId": null,
      "subject": null,
      "settings": null
    },
    {
      "order": 3,
      "type": "sendEmail",
      "typeName": "SendEmail",
      "delayMinutes": null,
      "templateId": "9k4p2x7m1q3n8z",
      "subject": "Getting started with MailLand",
      "settings": null
    }
  ],
  "completionRate": 86.96,
  "createdAt": "2026-01-10T08:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Actualizar una automatización

PUT https://api.mail.land/v1/marketing/automations/{id}

Se puede actualizar cualquier estado excepto Active (no solo Draft/Paused). El cuerpo de la solicitud es el mismo que el de creación.

Update an automation
curl -X PUT https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Welcome Series",
    "trigger": 0,
    "mailingListId": "7h3n5k8w2q9m1t",
    "steps": [
      {
        "type": 0, "order": 1,
        "subject": "Welcome!",
        "templateId": "2p9x4k7m3q8n1z"
      },
      { "type": 1, "order": 2, "delayMinutes": 1440 },
      {
        "type": 0, "order": 3,
        "subject": "Getting started",
        "templateId": "9k4p2x7m1q3n8z"
      }
    ]
  }'

Activar una automatización

POST https://api.mail.land/v1/marketing/automations/{id}/activate

Cambia el estado de la automatización de Draft o Paused a Active. Una vez activa, la automatización comienza a inscribir suscriptores cuando se activa el disparador.

La activación en sí no se verifica contra la verificación de dominio. Un paso SendEmail alcanzado sin ningún dominio completamente verificado se retiene, no se omite: se vuelve a comprobar en un intervalo creciente (15 minutos, luego hasta cada 6 horas) y se envía en cuanto un dominio se verifica. Si ningún dominio se verifica dentro de los 7 días desde que el paso venció por primera vez, la inscripción se marca Failed (se cuenta en totalFailed) en lugar de quedar retenida para siempre: así que activar sin ningún dominio verificado tiene éxito, pero nada se entrega hasta que verifique uno, y las inscripciones que sigan esperando después de una semana terminan en lugar de retenerse indefinidamente.

Activate an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/activate \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Pausar una automatización

POST https://api.mail.land/v1/marketing/automations/{id}/pause

Pausa la automatización. No se inscriben nuevos suscriptores, y los suscriptores que ya están en la secuencia dejan de avanzar: cada inscripción se detiene en su paso actual. Volver a activar la automatización reanuda cada inscripción detenida desde donde quedó, entregando todo lo que venció mientras estaba pausada.

Pause an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/pause \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Archivar una automatización

POST https://api.mail.land/v1/marketing/automations/{id}/archive

Archiva la automatización, lo cual se puede hacer desde cualquier estado, incluido Active. Las automatizaciones archivadas se ocultan de las vistas de lista predeterminadas.

Archivar detiene tanto las nuevas inscripciones como los pasos posteriores para los suscriptores ya inscritos: cada inscripción se detiene en su paso actual, igual que al pausar. A diferencia de pausar, no existe un endpoint que reactive una automatización Archived, así que esta detención no se resuelve por sí sola.

Archive an automation
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/archive \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Duplicar una automatización

POST https://api.mail.land/v1/marketing/automations/{id}/duplicate?name=Copy%20of%20Welcome%20Series

Crea una nueva automatización en Draft con los pasos y configuraciones clonados. El parámetro de consulta name es opcional.

Duplicate an automation
curl -X POST "https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/duplicate?name=Copy%20of%20Welcome%20Series" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Disparar manualmente

POST https://api.mail.land/v1/marketing/automations/{id}/trigger
Manual trigger request
{
  "subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]
}

Inscriba manualmente suscriptores específicos en la automatización. La automatización debe estar en estado Active y su tipo de disparador debe ser Manual (5).

Trigger automation manually
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/trigger \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]}'

Seguimiento de inscripciones

El progreso de cada suscriptor a través de la automatización se rastrea como una inscripción:

EstadoValorDescripción
Active0Avanzando actualmente a través de los pasos
Paused1Inscripción pausada
Completed2Finalizó todos los pasos
Failed3Un paso SendEmail no tiene plantilla en este tenant: ausente desde el inicio o eliminada después. Se cuenta en el totalFailed de la automatización
Unsubscribed4El suscriptor se desuscribió durante la secuencia

No existe un estado de inscripción Cancelled. La respuesta de detalle de la automatización incluye conteos agregados de inscripciones como totalEnrolled y totalCompleted (no totalEnrollments/activeEnrollments/completedEnrollments/failedEnrollments).

Eliminar una automatización

DELETE https://api.mail.land/v1/marketing/automations/{id}

Elimina permanentemente la automatización, sus pasos y los datos de inscripción.

Actualizar y eliminar están permitidos para cualquier estado excepto Active: no solo Draft/Paused (actualizar) o Draft/Archived (eliminar) como indicaban versiones anteriores de esta página.

Delete an automation
curl -X DELETE https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Respuestas de error

EstadoCódigoDescripción
400VALIDATION_FAILEDCampos obligatorios faltantes o configuración de paso inválida: incluido un paso SendEmail sin templateId o un paso Condition con settings no evaluables
400TEMPLATE_NOT_FOUNDEl templateId de un paso SendEmail no resuelve a una plantilla de su tenant
400INVALID_REQUESTEl nombre de la automatización ya existe o transición de estado inválida
403FORBIDDENPermisos insuficientes
404RESOURCE_NOT_FOUNDAutomatización no encontrada, o la transición de estado no es válida (actualización/activación/pausa en el estado incorrecto, eliminación de una automatización Active)

Los endpoints de automatizaciones nunca devuelven 422.

Próximos pasos

  • Campañas: envíe campañas de una sola vez
  • Suscriptores: administre los contactos a los que se dirigen las automatizaciones
  • Listas: organice suscriptores en listas para los disparadores

En esta página