MailLandDocs
Marketing

Segmentos

Cree segmentos dinámicos basados en atributos y comportamiento de los suscriptores

Los segmentos son grupos dinámicos de suscriptores definidos por condiciones. A diferencia de las listas estáticas, los segmentos se actualizan automáticamente a medida que cambian los datos de los suscriptores. Utilice segmentos para dirigir campañas a audiencias específicas según atributos, participación y comportamiento.

Tipos de coincidencia

Tipo de coincidenciaValorDescripción
All0Todas las condiciones deben coincidir (lógica AND)
Any1Cualquier condición puede coincidir (lógica OR)

Crear un segmento

POST https://api.mail.land/v1/marketing/segments
Create segment request
{
  "name": "Active Engaged Users",
  "description": "Users who opened or clicked in last 30 days",
  "matchType": "All",
  "conditions": [
    {
      "field": "lastemailopenedat",
      "operator": "inlast",
      "value": "30"
    },
    {
      "field": "status",
      "operator": "equals",
      "value": "Active"
    }
  ]
}
CampoTipoRequeridoDescripción
namestringSíNombre del segmento (único por espacio de trabajo)
descriptionstringNoDescripción del segmento
matchTypestringNoAll (predeterminado) o Any
conditionsarraySíAl menos una condición
Create a segment
curl -X POST https://api.mail.land/v1/marketing/segments \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Active Engaged Users",
    "matchType": "All",
    "conditions": [
      { "field": "lastemailopenedat", "operator": "inlast", "value": "30" },
      { "field": "status", "operator": "equals", "value": "Active" }
    ]
  }'

Respuesta

Segment response
{
  "id": "0qe306asbapwvd",
  "name": "Active Engaged Users",
  "description": "Users who opened or clicked in last 30 days",
  "matchType": "all",
  "matchTypeName": "All",
  "conditionsCount": 2,
  "subscriberCount": 450,
  "createdAt": "2026-02-17T12:00:00Z",
  "updatedAt": "2026-02-17T12:00:00Z"
}

Las respuestas devuelven matchType en minúsculas ("all" / "any") aunque la solicitud de creación/actualización acepte "All"/"Any".

Los campos de condición basados en aperturas/clics (emailsopened, lastemailopenedat, etc.) incluyen actividad de máquinas, la precarga de Apple Mail Privacy Protection y los escáneres de enlaces de seguridad, que no se filtra hoy.

También existe un endpoint no documentado GET /{id}/preview, que devuelve una muestra de suscriptores que actualmente coinciden con las condiciones del segmento.

Campos de condición

Campos de texto

Campos: email, firstname, lastname, company, source, phone

OperadorDescripciónValor requerido
equalsCoincidencia exactaSí
notequalsNo igualSí
containsContiene subcadenaSí
notcontainsNo contieneSí
startswithComienza conSí
endswithTermina conSí
isemptyEl campo está vacíoNo
isnotemptyEl campo no está vacíoNo

Campos numéricos

Campos: emailssent, emailsopened, emailsclicked

OperadorDescripciónValor requeridoValor2 requerido
equalsIgual aSíNo
notequalsNo igualSíNo
greaterthanMayor queSíNo
greaterthanorequalMayor o igualSíNo
lessthanMenor queSíNo
lessthanorequalMenor o igualSíNo
betweenEntre dos valoresSíSí

Campos de fecha

Campos: createdat, subscribedat, lastemailsentat, lastemailopenedat, lastemailclickedat

OperadorDescripciónValor requerido
equalsEn fecha específicaSí (fecha ISO)
beforeAntes de la fechaSí (fecha ISO)
afterDespués de la fechaSí (fecha ISO)
onorbeforeEn o antesSí (fecha ISO)
onorafterEn o despuésSí (fecha ISO)
betweenEntre fechasSí (value + value2)
inlastEn los últimos N díasSí (días entero)
isnullFecha no establecidaNo
isnotnullFecha establecidaNo

Campos enum

Campo: status

OperadorDescripciónValores
equalsIgual al estadoActive, Unsubscribed, Bounced, Complained
notequalsNo igual aMismos valores

Ejemplos de condiciones

Email domain filter
{ "field": "email", "operator": "contains", "value": "example.com" }
High engagement filter
{ "field": "emailssent", "operator": "between", "value": "10", "value2": "50" }
Recent clickers
{ "field": "lastemailclickedat", "operator": "inlast", "value": "7" }
Missing first name
{ "field": "firstname", "operator": "isempty" }

Obtener metadatos del segmento

Recupere todos los campos, operadores y valores enum disponibles para construir condiciones de segmento:

GET https://api.mail.land/v1/marketing/segments/metadata/fields
Get segment metadata
curl https://api.mail.land/v1/marketing/segments/metadata/fields \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Metadata response
{
  "fields": [
    {
      "name": "email",
      "label": "Email",
      "type": "string",
      "operators": ["equals", "notequals", "contains", "notcontains", "startswith", "endswith", "isempty", "isnotempty"],
      "enumValues": null
    },
    {
      "name": "status",
      "label": "Status",
      "type": "enum",
      "operators": ["equals", "notequals"],
      "enumValues": ["Active", "Unsubscribed", "Bounced", "Complained"]
    }
  ]
}

Listar segmentos

GET https://api.mail.land/v1/marketing/segments
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 o descripción
sortBystring-Campo de ordenamiento
sortDescboolfalseOrdenar descendente
List segments
curl "https://api.mail.land/v1/marketing/segments?limit=20" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Obtener detalles del segmento

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

Devuelve el segmento completo con sus condiciones:

Get segment details
curl https://api.mail.land/v1/marketing/segments/0qe306asbapwvd \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Segment detail response
{
  "id": "0qe306asbapwvd",
  "name": "Active Engaged Users",
  "description": "Users who engaged in last 30 days",
  "matchType": "all",
  "matchTypeName": "All",
  "conditionsCount": 2,
  "subscriberCount": 450,
  "conditions": [
    {
      "field": "lastemailopenedat",
      "operator": "inlast",
      "value": "30",
      "value2": null
    },
    {
      "field": "status",
      "operator": "equals",
      "value": "Active",
      "value2": null
    }
  ],
  "cachedCount": 450,
  "cachedAt": "2026-02-17T10:00:00Z",
  "createdAt": "2026-01-10T08:00:00Z",
  "updatedAt": "2026-02-17T10:00:00Z"
}

Previsualizar condiciones

Previsualice el resultado de las condiciones antes de crear un segmento. La evaluación de segmentos siempre se restringe a suscriptores con estado Active, por lo que una condición como status notequals Active no coincide con nadie.

POST https://api.mail.land/v1/marketing/segments/preview
Preview request
{
  "conditions": [
    { "field": "lastemailopenedat", "operator": "inlast", "value": "30" }
  ],
  "matchType": "All"
}
Preview segment conditions
curl -X POST https://api.mail.land/v1/marketing/segments/preview \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "conditions": [
      { "field": "lastemailopenedat", "operator": "inlast", "value": "30" }
    ],
    "matchType": "All"
  }'
Preview response
{
  "count": 450,
  "sampleEmails": [
    "[email protected]",
    "[email protected]",
    "[email protected]"
  ]
}

Obtener recuento del segmento

GET https://api.mail.land/v1/marketing/segments/{id}/count
Get segment count
curl https://api.mail.land/v1/marketing/segments/0qe306asbapwvd/count \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Count response
{
  "segmentId": "0qe306asbapwvd",
  "count": 450
}

Actualizar caché del segmento

Forzar un recuento de suscriptores coincidentes:

POST https://api.mail.land/v1/marketing/segments/{id}/refresh
Refresh segment cache
curl -X POST https://api.mail.land/v1/marketing/segments/0qe306asbapwvd/refresh \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Refresh response
{
  "segmentId": "0qe306asbapwvd",
  "count": 460,
  "refreshedAt": "2026-02-17T12:30:00Z"
}

Duplicar un segmento

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

Crea un nuevo segmento con condiciones clonadas. El parámetro name es opcional.

Duplicate a segment
curl -X POST "https://api.mail.land/v1/marketing/segments/0qe306asbapwvd/duplicate?name=Copy%20of%20Segment" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Actualizar un segmento

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

El cuerpo de la solicitud coincide con la solicitud de creación. Actualizar un segmento actualiza automáticamente su recuento en caché.

Update a segment
curl -X PUT https://api.mail.land/v1/marketing/segments/0qe306asbapwvd \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Active Engaged Users (Updated)",
    "matchType": "All",
    "conditions": [
      { "field": "lastemailopenedat", "operator": "inlast", "value": "14" },
      { "field": "status", "operator": "equals", "value": "Active" }
    ]
  }'

Eliminar un segmento

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

Eliminar un segmento lo desvincula de cualquier campaña en estado Draft o Scheduled que lo tenga como objetivo (el segmentId de la campaña queda en null), lo que la deja sin audiencia: al enviarla se obtiene 422 o no se entrega a nadie. Una campaña que ya está Sending no se ve afectada, porque sus destinatarios ya fueron resueltos.

Delete a segment
curl -X DELETE https://api.mail.land/v1/marketing/segments/0qe306asbapwvd \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Respuestas de error

EstadoCódigoDescripción
400VALIDATION_FAILEDNombre o condiciones inválidos
400INVALID_REQUESTEl nombre del segmento ya existe
403FORBIDDENPermisos insuficientes
404RESOURCE_NOT_FOUNDSegmento no encontrado

Próximos pasos

  • Campañas: dirigir campañas con segmentos
  • Automatizaciones: las automatizaciones no se activan actualmente por membresía de segmento
  • Suscriptores: gestionar los contactos en sus segmentos

En esta página