MailLandDocs
Marketing

Segments

Créez des segments dynamiques basés sur les attributs et le comportement des abonnés

Les segments sont des groupes d'abonnés dynamiques définis par des conditions. Contrairement aux listes statiques, les segments se mettent à jour automatiquement à mesure que les données des abonnés changent. Utilisez les segments pour cibler des campagnes sur des audiences spécifiques en fonction des attributs, de l'engagement et du comportement.

Types de correspondance

Type de correspondanceValeurDescription
All0Toutes les conditions doivent correspondre (logique ET)
Any1N'importe quelle condition peut correspondre (logique OU)

Créer un segment

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"
    }
  ]
}
ChampTypeRequisDescription
namestringOuiNom du segment (unique par espace de travail)
descriptionstringNonDescription du segment
matchTypestringNonAll (par défaut) ou Any
conditionsarrayOuiAu moins une condition
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" }
    ]
  }'

Réponse

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"
}

Les réponses renvoient matchType en minuscules ("all" / "any") même si la requête de création/mise à jour accepte "All"/"Any".

Les champs de condition basés sur les ouvertures/clics (emailsopened, lastemailopenedat, etc.) incluent une activité automatisée, le préchargement d'Apple Mail Privacy Protection et les scanners de liens de sécurité, qui n'est pas filtrée aujourd'hui.

Un endpoint non documenté GET /{id}/preview existe également, renvoyant un échantillon d'abonnés correspondant actuellement aux conditions du segment.

Champs de condition

Champs texte

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

OpérateurDescriptionValeur requise
equalsCorrespondance exacteOui
notequalsDifférent deOui
containsContient une sous-chaîneOui
notcontainsNe contient pasOui
startswithCommence parOui
endswithSe termine parOui
isemptyLe champ est videNon
isnotemptyLe champ n'est pas videNon

Champs numériques

Champs : emailssent, emailsopened, emailsclicked

OpérateurDescriptionValeur requiseValeur2 requise
equalsÉgal àOuiNon
notequalsDifférent deOuiNon
greaterthanSupérieur àOuiNon
greaterthanorequalSupérieur ou égalOuiNon
lessthanInférieur àOuiNon
lessthanorequalInférieur ou égalOuiNon
betweenEntre deux valeursOuiOui

Champs date

Champs : createdat, subscribedat, lastemailsentat, lastemailopenedat, lastemailclickedat

OpérateurDescriptionValeur requise
equalsÀ une date préciseOui (date ISO)
beforeAvant la dateOui (date ISO)
afterAprès la dateOui (date ISO)
onorbeforeLe ou avantOui (date ISO)
onorafterLe ou aprèsOui (date ISO)
betweenEntre deux datesOui (value + value2)
inlastDans les N derniers joursOui (entier jours)
isnullDate non définieNon
isnotnullDate définieNon

Champs enum

Champ : status

OpérateurDescriptionValeurs
equalsÉgal au statutActive, Unsubscribed, Bounced, Complained
notequalsDifférent deMêmes valeurs

Exemples de conditions

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" }

Obtenir les métadonnées du segment

Récupérez tous les champs, opérateurs et valeurs enum disponibles pour la création de conditions de segment :

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"]
    }
  ]
}

Lister les segments

GET https://api.mail.land/v1/marketing/segments
ParamètreTypeDéfautDescription
cursorstring-Curseur opaque issu du nextCursor de la page précédente. À omettre pour la première page.
limitint20Éléments par page
searchstring-Rechercher par nom ou description
sortBystring-Champ de tri
sortDescboolfalseTri décroissant
List segments
curl "https://api.mail.land/v1/marketing/segments?limit=20" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Obtenir les détails d'un segment

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

Renvoie le segment complet avec ses conditions :

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"
}

Prévisualiser les conditions

Prévisualisez le résultat des conditions avant de créer un segment. L'évaluation d'un segment se limite toujours aux abonnés à l'état Active, si bien qu'une condition comme status notequals Active ne correspond à personne.

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]"
  ]
}

Obtenir le nombre d'abonnés du segment

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
}

Actualiser le cache du segment

Forcer un recomptage des abonnés correspondants :

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"
}

Dupliquer un segment

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

Crée un nouveau segment avec des conditions clonées. Le paramètre name est optionnel.

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

Mettre à jour un segment

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

Le corps de la requête correspond à la requête de création. La mise à jour d'un segment actualise automatiquement son nombre mis en cache.

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" }
    ]
  }'

Supprimer un segment

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

La suppression d'un segment le détache de toute campagne à l'état Draft ou Scheduled qui le cible (le segmentId de la campagne est effacé), ce qui la laisse sans audience : l'envoyer renvoie 422 ou ne délivre à personne. Une campagne déjà à l'état Sending n'est pas affectée, car ses destinataires ont déjà été résolus.

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

Réponses d'erreur

StatutCodeDescription
400VALIDATION_FAILEDNom ou conditions invalides
400INVALID_REQUESTLe nom du segment existe déjà
403FORBIDDENPermissions insuffisantes
404RESOURCE_NOT_FOUNDSegment introuvable

Étapes suivantes

  • Campagnes : cibler les campagnes avec des segments
  • Automatisations : les automatisations ne se déclenchent actuellement pas sur l'appartenance à un segment
  • Abonnés : gérer les contacts dans vos segments

Sur cette page