MailLandDocs
Entregabilidad

Supresiones

Administre las listas de supresión para evitar envíos a direcciones inválidas, desuscritas o que han presentado quejas

La lista de supresión evita que se envíen correos electrónicos a direcciones que han rebotado, se han desuscrito o han presentado quejas. MailLand administra las supresiones automáticamente a partir de eventos de rebote y queja, y usted puede agregar o eliminar entradas manualmente a través de la API.

Tipos de supresión

TipoValorDescripciónAlcance predeterminado
HardBounce1Fallo de entrega permanenteGlobal (siempre)
SoftBounce2Fallo temporal (supresión de marketing de 30 días, escala solo tras ≥3 rebotes elegibles en ≥7 días)Marketing (expiración de 30 días)
Complaint3El destinatario marcó el correo como spamGlobal (siempre)
Unsubscribe4El destinatario se desuscribióDepende del tipo de mensaje
Manual5Agregado manualmente vía API o panelCualquier alcance
Invalid6Formato de correo electrónico inválidoGlobal (siempre)
SpamTrap7Dirección de trampa de spam conocidaGlobal (siempre)
RoleAddress8Correo basado en rol (info@, admin@, etc.)Global (siempre)

Alcances de supresión

Los alcances controlan qué tipos de correos son bloqueados:

AlcanceValorComportamiento
Global0Bloquea todos los correos (transaccionales y de marketing)
Marketing1Bloquea correos de marketing; los correos transaccionales se entregan normalmente
Transactional2Bloquea solo correos transaccionales (raro)
List3Bloquea correos solo para una lista de correo específica

Restricciones de alcance:

  • HardBounce, Complaint, Invalid, SpamTrap, RoleAddress → solo alcance Global
  • SoftBounce → típicamente alcance Marketing
  • Unsubscribe → Global, Marketing o List (no Transactional)
  • Manual → cualquier alcance

Listar supresiones

GET https://api.mail.land/v1/transactional/suppressions

Autentíquese con Authorization: Bearer <token> o X-API-Key: <api key>.

List suppressions
curl https://api.mail.land/v1/transactional/suppressions \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Parámetros de consulta

ParámetroTipoPredeterminadoDescripción
cursorstring-Cursor opaco del nextCursor de la página anterior. Omitir para la primera página.
limitint50Elementos por página (máx. 100)
searchstring-Filtrar por dirección de correo electrónico
typeSuppressionType-Filtrar por tipo
scopeSuppressionScope-Filtrar por alcance
mailingListIdstring-El id público de la lista de correo, resuelto dentro de su tenant. Un id desconocido, ajeno o numérico devuelve 404.
fromDatedatetimehace 90 díasFecha de inicio
toDatedatetimeAhoraFecha de fin
sortBystringCreatedAtCampo de ordenamiento
sortDescendingbooltrueDirección de ordenamiento
Suppression list response
{
  "items": [
    {
      "id": "k3v9x2m8q1w7z4",
      "email": "[email protected]",
      "suppressionType": "hardBounce",
      "scope": "global",
      "mailingListId": null,
      "mailingListName": null,
      "expiresAt": null,
      "reason": "550 5.1.1 The email account does not exist",
      "bounceType": "Hard",
      "bounceCategory": "invalid_recipient",
      "bounceCount": 1,
      "lastBounceAt": "2026-02-17T12:00:00Z",
      "unsubscribeSource": null,
      "campaignId": null,
      "subscriberId": null,
      "source": "webhook",
      "notes": null,
      "createdAt": "2026-02-17T12:00:01Z",
      "isLocked": false,
      "lockedReason": null
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

mailingListId, campaignId y subscriberId son el id público del recurso relacionado, resuelto dentro de su tenant: nunca el id numérico interno de la fila. Cada uno es null cuando la entrada no tiene ese vínculo, o cuando el recurso vinculado se ha eliminado desde entonces.

Estadísticas de supresión

Obtenga un resumen de su lista de supresión:

GET https://api.mail.land/v1/transactional/suppressions/stats
Get suppression stats
curl https://api.mail.land/v1/transactional/suppressions/stats \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Stats response
{
  "totalCount": 5000,
  "globalCount": 3000,
  "marketingCount": 1500,
  "transactionalCount": 200,
  "listCount": 300,
  "hardBounceCount": 2000,
  "softBounceCount": 1500,
  "complaintCount": 500,
  "unsubscribeCount": 700,
  "manualCount": 200,
  "invalidCount": 50,
  "spamTrapCount": 30,
  "roleAddressCount": 20,
  "expiringCount": 85,
  "lastSuppression": "2026-02-17T12:00:01Z"
}

El campo expiringCount muestra los rebotes soft que expirarán dentro de los próximos 7 días.

Verificar si un correo electrónico está suprimido

Verificación individual

GET https://api.mail.land/v1/transactional/suppressions/[email protected]&messageType=Marketing
Check suppression
curl "https://api.mail.land/v1/transactional/suppressions/[email protected]&messageType=Marketing" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
ParámetroTipoPredeterminadoDescripción
emailstring-Dirección de correo electrónico (obligatorio)
messageTypestringMarketingMarketing o Transactional
mailingListIdstring-El id público de la lista de correo, resuelto dentro de su tenant. Un id desconocido, ajeno o numérico devuelve 404.
Check response
{
  "email": "[email protected]",
  "isSuppressed": true,
  "messageType": "Marketing"
}

Verificación masiva

Verifique hasta 1,000 correos electrónicos a la vez:

POST https://api.mail.land/v1/transactional/suppressions/check-bulk
Bulk check suppressions
curl -X POST https://api.mail.land/v1/transactional/suppressions/check-bulk \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"emails":["[email protected]","[email protected]","[email protected]"],"messageType":"Marketing","mailingListId":null}'
Bulk check request
{
  "emails": ["[email protected]", "[email protected]", "[email protected]"],
  "messageType": "Marketing",
  "mailingListId": null
}
Bulk check response
{
  "suppressedEmails": ["[email protected]"]
}

Agregar una supresión

POST https://api.mail.land/v1/transactional/suppressions
Add suppression
curl -X POST https://api.mail.land/v1/transactional/suppressions \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","suppressionType":"Manual","scope":"Global","reason":"Customer requested removal from all lists","notes":"Ticket #4521"}'
Add suppression request
{
  "email": "[email protected]",
  "suppressionType": "Manual",
  "scope": "Global",
  "reason": "Customer requested removal from all lists",
  "notes": "Ticket #4521"
}
CampoTipoObligatorioPredeterminadoDescripción
emailstringSí-Dirección de correo electrónico (máx. 255 caracteres)
suppressionTypestringNoManualTipo de supresión
scopestringNoGlobalAlcance de supresión
mailingListIdstringNo-El id público de la lista de correo, resuelto dentro de su tenant. Obligatorio si el alcance es List; un id desconocido, ajeno o numérico devuelve 404.
reasonstringNo-Razón (máx. 500 caracteres)
notesstringNo-Notas internas

Devuelve 201 Created con el objeto de supresión completo. El encabezado Location es /v1/transactional/suppressions: la ruta de listado, ya que no existe un endpoint de obtención por id. Use el campo id del cuerpo para identificar la supresión creada, y las secciones "Listar supresiones" o "Verificar si un correo electrónico está suprimido" más abajo para buscarla.

Agregar en masa

Agregue hasta 1,000 supresiones a la vez:

POST https://api.mail.land/v1/transactional/suppressions/bulk
Bulk add suppressions
curl -X POST https://api.mail.land/v1/transactional/suppressions/bulk \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"emails":[{"email":"[email protected]","suppressionType":"Manual","scope":"Global","reason":"Cleanup"},{"email":"[email protected]","suppressionType":"Manual","scope":"Marketing"}]}'
Bulk add request
{
  "emails": [
    { "email": "[email protected]", "suppressionType": "Manual", "scope": "Global", "reason": "Cleanup" },
    { "email": "[email protected]", "suppressionType": "Manual", "scope": "Marketing" }
  ]
}
Bulk add response
{
  "totalCount": 2,
  "addedCount": 2,
  "skippedCount": 0,
  "skippedEmails": [],
  "message": "Added 2 suppressions"
}

Los correos electrónicos que ya existen en la lista de supresión se omiten (no se duplican).

Importar desde CSV

Desde contenido de texto

POST https://api.mail.land/v1/transactional/suppressions/import
Import suppressions from CSV text
curl -X POST https://api.mail.land/v1/transactional/suppressions/import \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"csvContent":"[email protected]\[email protected]\[email protected]","defaultReason":"Imported from legacy system","suppressionType":"Manual","scope":"Global"}'
CSV import request
{
  "csvContent": "[email protected]\n[email protected]\n[email protected]",
  "defaultReason": "Imported from legacy system",
  "suppressionType": "Manual",
  "scope": "Global"
}

Desde carga de archivo

POST https://api.mail.land/v1/transactional/suppressions/import-file
Import suppressions from file
curl -X POST "https://api.mail.land/v1/transactional/suppressions/import-file?scope=List&mailingListId=123" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -F "[email protected]"

scope y mailingListId son parámetros de consulta, no campos de formulario: un campo de formulario con cualquiera de esos nombres se ignora silenciosamente, así que una importación de alcance List enviada como campo de formulario falla con 400. mailingListId es el id público de la lista, resuelto dentro de su tenant; un id desconocido, ajeno o numérico devuelve 404.

Cargue un archivo .csv (máx. 5 MB) con direcciones de correo electrónico separadas por comas o saltos de línea. Una fila de encabezado que contenga "email" se omite automáticamente.

Parámetros de consulta:

ParámetroTipoDescripción
filefile (campo de formulario multipart)Archivo CSV (máx. 5 MB, extensión .csv obligatoria)
scopestring (consulta)Alcance de supresión (predeterminado: Global)
mailingListIdstring (consulta)El id público de la lista de correo, resuelto dentro de su tenant. Obligatorio si el alcance es List; un id desconocido, ajeno o numérico devuelve 404.
Import result
{
  "totalRows": 1000,
  "importedCount": 950,
  "skippedCount": 40,
  "invalidCount": 10,
  "invalidEmails": ["not-an-email", "missing-domain@", "..."],
  "errors": [],
  "message": "Imported 950 emails. 40 already existed. 10 invalid."
}

La lista invalidEmails muestra hasta 10 entradas inválidas. Los correos electrónicos que ya existían se cuentan como skippedCount, no como errores.

Exportar supresiones

Descargue su lista de supresión como CSV:

GET https://api.mail.land/v1/transactional/suppressions/export
Export suppressions
curl https://api.mail.land/v1/transactional/suppressions/export \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -o suppressions.csv
ParámetroTipoDescripción
typeSuppressionTypeFiltrar por tipo
scopeSuppressionScopeFiltrar por alcance
mailingListIdstringEl id público de la lista de correo, resuelto dentro de su tenant. Un id desconocido, ajeno o numérico devuelve 404.

Devuelve un archivo CSV con las columnas: email, type, scope, mailing_list, reason, bounce_count, source, created_at, expires_at. Limitado a 100,000 filas.

Eliminar una supresión

Por ID

DELETE https://api.mail.land/v1/transactional/suppressions/{id}
Delete suppression by ID
curl -X DELETE https://api.mail.land/v1/transactional/suppressions/k3v9x2m8q1w7z4 \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Por correo electrónico

DELETE https://api.mail.land/v1/transactional/suppressions/[email protected]
Delete suppression by email
curl -X DELETE "https://api.mail.land/v1/transactional/suppressions/[email protected]" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
ParámetroTipoDescripción
emailstringCorreo electrónico a desuprimir (obligatorio)
scopeSuppressionScopeEliminar solo para este alcance
mailingListIdstringEliminar solo para esta lista de correo: su id público, resuelto dentro de su tenant. Un id desconocido, ajeno o numérico devuelve 404.

Devuelve 204 No Content en caso de éxito, 404 si no se encuentra.

Supresiones bloqueadas

Ciertas supresiones no pueden eliminarse para proteger la reputación de su remitente y cumplir con las regulaciones antispam:

Tipo bloqueadoRazón
ComplaintQueja de spam: requisito de cumplimiento
SpamTrapTrampa de spam conocida: protección de entregabilidad
Desuscripción vía FeedbackLoopBucle de retroalimentación del ISP
Desuscripción vía OneClickDesuscripción con un clic RFC 8058
Desuscripción vía ManualLinkEl usuario confirmó la desuscripción
Desuscripción vía PreferenceElección del centro de preferencias del usuario

Intentar eliminar una supresión bloqueada devuelve:

403 Forbidden
{
  "code": "SUPPRESSION_LOCKED",
  "message": "Cannot delete: Spam complaint - compliance requirement",
  "details": {
    "lockedReason": "Spam complaint - compliance requirement"
  }
}

Eliminar supresiones basadas en quejas y reenviar a esas direcciones dañará la reputación de su remitente y puede violar las leyes antispam. Estas supresiones están bloqueadas para su protección.

Fuentes de desuscripción

Cuando un destinatario se desuscribe, se registra la fuente:

FuenteValorDescripciónBloqueada
ListUnsubscribeHeader0Encabezado List-Unsubscribe RFC 8058No
ListUnsubscribeMail1Desuscripción por mailto:No
WebForm2Página web de desuscripciónNo
Api3Llamada a la APINo
Admin4Panel de administraciónNo
FeedbackLoop5Bucle de retroalimentación del ISPSí
OneClick6POST de un clic RFC 8058Sí
ManualLink7El usuario confirmó vía enlaceSí
Preference8Elección del centro de preferenciasSí

Respuestas de error

EstadoCódigoDescripción
400INVALID_REQUESTError de validación (correo, alcance o tipo inválido)
400INVALID_EMAIL_FORMATEl formato de la dirección de correo electrónico es inválido
400CONTENT_TOO_LARGEEl archivo CSV excede 5 MB
403SUPPRESSION_LOCKEDNo se puede eliminar una supresión bloqueada
404RESOURCE_NOT_FOUNDSupresión no encontrada, o un mailingListId indicado no nombra ninguna lista de correo en su tenant

Próximos pasos

  • Rebotes: comprenda los tipos de rebotes y la supresión automática
  • Resumen de entregabilidad: monitoree la reputación del remitente
  • Eventos de webhooks: reciba eventos message.bounced (suppression.added/suppression.removed están definidos en el catálogo, pero hoy nunca se emiten)

En esta página