Documentación interactiva · Portal de desarrolladores · Especificación OpenAPI · EN · FR · DE · IT · PT · ES

Mailpro™ Email API v2 : Referencia

URL base : https://api.mailpro.com/v2

La API Email v2 de Mailpro™ le permite gestionar mediante programación listas de contactos, plantillas de correo, direcciones de remitente y campañas, así como enviar tanto correos masivos como transaccionales.

Autenticación

Todos los endpoints aceptan tres métodos de autenticación. Utilice el que mejor se adapte a su stack.

> El Bearer JWT heredado e IdClient+ApiKey siguen funcionando sin cambios y no están > sujetos a los scopes. Solo los tokens de acceso OAuth 2.0 están sujetos a los controles de scope > por endpoint indicados en cada operación más abajo.

Método 1 — OAuth 2.0 (recomendado para integraciones)

Mailpro utiliza un único servidor de autorización OAuth 2.0 para todas sus API, en una superficie única e independiente de la versión: https://api.mailpro.com/oauth/. No existe un endpoint OAuth por versión: usted obtiene un token en /oauth/token y el mismo token funciona en esta API Email v2, en CRM v3 y en SMS. Los endpoints a los que puede llamar dependen de los scopes del token, no de la URL base de la API. Emisor (claim iss): https://api.mailpro.com/oauth/.

EndpointURL
AutorizaciónGET https://api.mailpro.com/oauth/authorize
Token / renovaciónPOST https://api.mailpro.com/oauth/token
JWKSGET https://api.mailpro.com/oauth/.well-known/jwks
DescubrimientoGET https://api.mailpro.com/oauth/.well-known/openid-configuration

Grants: authorization_code + PKCE (S256, obligatorio), client_credentials, refresh_token (rotación). Duración del token de acceso: 20 min; token de actualización: 30 días (deslizantes, de un solo uso); código de autorización: 60 s.

Inicio rápido: obtener un token y llamar a esta API (sustituya los valores; nunca haga commit de un secreto real):

curl -X POST https://api.mailpro.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=email:send email:read"

Después llame a esta API con Authorization: Bearer ACCESS_TOKEN. El mismo token funciona en las API CRM v3 y SMS. Un token al que le falte el scope exigido por un endpoint recibe 403 insufficient_scope. Recorrido completo y catálogo de scopes: consulte la documentación de la API CRM v3 › Autenticación. Scopes útiles para el email: email:send, email:read, email:templates:read, email:templates:write, contacts:read, contacts:write, account:read.

Método 2 — Bearer JWT (heredado)

Authorization: Bearer <access_token>

Obtenga un token mediante POST /token (codificado como formulario, OAuth2 password grant):

POST https://api.mailpro.com/v2/token
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY

El mismo token también es válido en la API CRM v3 y en la API SMS: autentíquese una sola vez y llame a cualquier API. Los tokens son válidos durante 30 días de forma predeterminada; utilice grant_type=refresh_token para renovarlos sin volver a autenticarse. Sin scopes: prefiera OAuth 2.0 para las integraciones instalables.

Método 3 — IdClient + ApiKey

Dos credenciales:

ParámetroTipoDescripción
IdCliententeroSu identificador numérico de cliente Mailpro, disponible en Configuración → Acceso API
ApiKeycadenaSu clave de API, disponible en Configuración → Acceso API

Envíelas en uno cualquiera de estos lugares — elija solo uno:

Si proporciona las credenciales en más de un lugar, prevalece la cabecera.

Control de scopes OAuth por endpoint (Email v2)

Para los tokens emitidos por OAuth, cada grupo de endpoints exige un scope (la autenticación heredada está exenta). Cada operación indica su scope en Authorization. Resumen:

EndpointsScope requerido
/send/* (campañas, transaccional, programación, prueba — salvo /send/{IdSend}/status)email:send
/stats/* (salvo /stats/del), /history/list, /send/{IdSend}/statusemail:read
/message/*, /senderEmail/* (lectura)email:templates:read
/message/*, /senderEmail/* (add/edit/del), /stats/delemail:templates:write
/list/list, /email/listcontacts:read
/list/{add,edit,del}, /email/{add,addSingle,edit,del}, /import/uploadcontacts:write
/account/*account:read

Un rechazo por scope devuelve 403 con { "error": "insufficient_scope", "required_scope": "…" }.

Formato de respuesta

Todos los endpoints admiten json (predeterminado) y xml. Especifique el formato en la URL:

Paginación

Misma regla en las tres API de Mailpro (Email v2, CRM v3, SMS): 5000 elementos por página, por defecto y como máximo.

Parámetros desconocidos: se ignoran, nunca se rechazan. Cuando una solicitud lleva un parámetro que la API no reconoce, la respuesta incluye X-Ignored-Parameters (los nombres) y X-Documentation (un enlace a esta página), para que un error tipográfico no pase desapercibido.

Respuestas de error

HTTPSignificado
400Solicitud incorrecta — falta un parámetro obligatorio o es inválido
401No autorizado — IdClient o ApiKey no válidos
403Prohibido — se ha alcanzado el límite de la cuenta (p. ej., número máximo de listas)
404No encontrado — el recurso solicitado no existe
500Error interno del servidor

Errores derivados de las reglas de negocio:

Seguimiento de entrega (emails transaccionales)

Cada email enviado de forma unitaria (POST /send/sendmail, la API CRM v3, el relé SMTP o una automatización) recibe un identificador. Puede seguirse hasta que el servidor del destinatario lo acepte o lo rechace. Las campañas no están cubiertas aquí: utilice las estadísticas.

statusSignificado¿Final?
queuedAceptado, en espera de envío.no
scheduledProgramado para más tarde (DatePlanned).no
sentEntregado por nuestros servidores, aún sin respuesta del servidor del destinatario.no
deliveredAceptado por el servidor del destinatario (DiagCode = su respuesta SMTP).sí
bouncedRechazado. BounceType: hard = dirección no válida o rechazo definitivo; soft = rechazo tras nuevos intentos (buzón lleno, servidor inaccesible…).sí
not_foundIdentificador desconocido o que no pertenece a su cuenta.sí

Consultar sin entrar en bucle

Los estados se conservan durante 365 días.

Webhooks

Mailpro™ puede notificar a su servidor en tiempo real cuando se producen ciertos eventos en su cuenta (un correo se entrega, una campaña finaliza, un contacto rebota, etc.). Al estilo de Stripe: su URL recibe un POST firmado con HMAC-SHA256 en cuanto se dispara el evento.

Cada evento enviado a su webhook cuenta como 1 petición en su cuota de peticiones a la API.

Cómo funciona

> ⏱ Retardo de activación — tras crear, actualizar o eliminar un webhook, el > cambio tarda hasta 10 minutos en propagarse por los servidores de la API de Mailpro. > Durante ese intervalo, los eventos pueden no coincidir todavía con su nueva suscripción > (o pueden seguir coincidiendo con una que acaba de eliminarse). Ese es el tiempo necesario para > refrescar la caché en memoria de suscripciones en cada instancia de la API.

Envoltorio de la carga útil

Todos los eventos comparten un envoltorio común:

{
  "id":         "evt_8f3a9b2c4d1e5f6789abcdef01234567",
  "type":       "email.delivered",
  "created":    1748194800,
  "apiVersion": "v2",
  "account":    { "id": 12345, "name": "ACME Corp" },
  "data":       { "messageId": "...", "email": "[email protected]", "...": "..." }
}
CampoFormatoDescripción
idevt_ + 32 hexIdentificador único del evento — utilícelo como clave de idempotencia en su lado.
type<domain>.<verb>Tipo de evento canónico.
createdSegundos Unix UTCSe incluye en la firma HMAC.
apiVersion"v2"Indica qué API de Mailpro publicó el evento.
account.idintSu identificador de cliente Mailpro (= IdClient).
account.namestringEl nombre de su cuenta (útil para depuración en el lado cliente).
dataobjectCarga útil del evento — la estructura depende de type (consulte el catálogo a continuación).

Catálogo de eventos

EventoDisparadorEstructura de data
pingPrueba mediante POST /webhooks/{id}/test{ message }
email.processedEnvío aceptado por la canalización{ messageId, email, campaignId, processedAt }
email.deliveredUn correo individual fue aceptado por el servidor del destinatario — API v2/v3, SMTP o Automation (no campañas). Emitido desde el flujo de entrega de PowerMTA.{ messageId, email, idSending, sendingType, diagCode, deliveredAt }
email.openedImpacto en el píxel de seguimiento{ messageId, email, campaignId, openedAt, ip, userAgent }
email.clickedClic en un enlace rastreado{ messageId, email, campaignId, clickedAt, url, ip, userAgent }
email.bouncedRebote duro o blando{ messageId, email, campaignId, bouncedAt, bounceType, reason }
email.spam_reportReclamación FBL{ messageId, email, campaignId, reportedAt }
email.unsubscribedClic en el enlace de baja{ messageId, email, campaignId, unsubscribedAt }
email.droppedRechazado antes del envío{ messageId, email, campaignId, droppedAt, reason }
campaign.startedComienza la distribución{ campaignId, name, totalRecipients, startedAt }
campaign.finishedTodos los destinatarios procesados{ campaignId, name, totalSent, totalFailed, finishedAt }
credits.lowEl saldo de créditos de correo está por debajo de su umbral de alerta{ remaining, threshold }

Suscríbase a todos los eventos de esta API pasando ["*"] en el array events.

Firma HMAC

Cada POST incluye una cabecera X-Mailpro-Signature:

X-Mailpro-Signature: t=1748194800,v1=7f9ac2b6e4d1c8a3...
X-Mailpro-Event-Id:  evt_8f3a9b2c4d1e5f6789abcdef01234567
X-Mailpro-Event-Type: email.delivered
X-Mailpro-Attempt:   1

Para verificar:

Node.js
const crypto = require('crypto');

function verifyMailproSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
  if (Math.abs(Date.now() / 1000 - parseInt(parts.t)) > 300) return false;
  const expected = crypto
    .createHmac('sha256', secret)
    .update(parts.t + '.' + rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(parts.v1, 'hex'),
    Buffer.from(expected, 'hex'));
}
PHP
function verifyMailproSignature(string $rawBody, string $header, string $secret): bool {
    parse_str(str_replace(',', '&', $header), $p);
    if (abs(time() - (int)$p['t']) > 300) return false;
    $expected = hash_hmac('sha256', $p['t'] . '.' . $rawBody, $secret);
    return hash_equals($expected, $p['v1']);
}
Python
import hmac, hashlib, time

def verify_mailpro_signature(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split('=') for p in header.split(','))
    t = int(parts['t'])
    if abs(time.time() - t) > 300:
        return False
    expected = hmac.new(
        secret.encode(),
        f"{t}.".encode() + raw_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, parts['v1'])
C#
using System.Security.Cryptography;
using System.Text;

static bool VerifyMailproSignature(string rawBody, string header, string secret) {
    var parts = header.Split(',')
        .Select(p => p.Split('='))
        .ToDictionary(a => a[0], a => a[1]);
    var t = long.Parse(parts["t"]);
    if (Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t) > 300) return false;
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes($"{t}.{rawBody}"));
    var expected = Convert.ToHexString(hash).ToLowerInvariant();
    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(expected),
        Encoding.UTF8.GetBytes(parts["v1"]));
}

Reintentos y desactivación automática

IntentoRetardo antes del siguiente intento
1 → 210 segundos
2 → 31 minuto
3 → 45 minutos
4 → 530 minutos
5 → 62 horas
6 → 76 horas
7abandonado (la entrega se marca como failed)

Tras 10 fallos consecutivos en el mismo webhook, este se desactiva automáticamente (isActive: false) y recibirá un correo de notificación. Vuelva a activarlo con PUT /webhooks/{id} una vez que su endpoint esté reparado.

Éxito = HTTP 2xx

Consideramos que su webhook se ha procesado correctamente solo si devuelve un estado en el rango 200–299. Cualquier 3xx/4xx/5xx o un tiempo de espera agotado (> 10 s) se considera un fallo y dispara reintentos. Si su endpoint está permanentemente inactivo, devuelva 410 Gone de forma explícita: los reintentos seguirán produciéndose, pero el motivo del fallo quedará más claro en su registro de entregas.

Límites

LímiteValor
Webhooks por cuenta20
Eventos suscritos por webhook50
Tamaño máximo de la carga útil256 KB
Tiempo de espera HTTP por intento10 segundos
Retención del historial de entregas30 días

Índice

Authentication

Obtenga un token Bearer JWT para autenticar todas las demás llamadas a la API. El endpoint /token de v2 es una redirección 307 al emisor canónico /v3/token — su cliente HTTP sigue la redirección de forma transparente (se conservan el método POST y el cuerpo).

POST /token

Obtener token de acceso (redirección 307 a /v3/token)

Obtiene un token Bearer JWT utilizando las credenciales de cliente de Mailpro. Pase el access_token devuelto como Authorization: Bearer <token> en todas las solicitudes posteriores. El mismo token también es válido en la CRM API v3 y la SMS API.

> ⚙ Detalle de implementación — POST /v2/token es una redirección > temporal 307 a POST /v3/token (configurada en la capa de reescritura > de IIS web.config). HTTP 307 conserva tanto el método (POST) > como el cuerpo de la solicitud, de modo que cualquier cliente HTTP > conforme con el estándar sigue la redirección de forma transparente — > usted continúa enviando POST a /v2/token y recibe un JWT válido a > cambio. No hay lógica de emisión de tokens duplicada; la Email API v2 > nunca emite tokens por sí misma.

Tipos de concesión admitidos
Tipo de concesiónCaso de uso
passwordIntegración estándar — nombre de usuario + clave de API
refresh_tokenRenovar un token de acceso que está a punto de expirar sin volver a autenticarse
client_credentialsServidor a servidor solo con el ID de cliente
Vigencia del token

Utilice grant_type=refresh_token para renovar el token de acceso sin volver a autenticarse. Almacene los tokens en el servidor (Vault, variables de entorno); no los incruste nunca en JS de navegador ni en binarios de aplicaciones móviles. Consulte la documentación de /token de la CRM API v3 para ver la nota de seguridad completa.

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
grant_typestring: password, refresh_token, client_credentialssí
usernamestringSu nombre de usuario de Mailpro (correo electrónico). Obligatorio para la concesión password.
passwordstringSu clave de API de Mailpro (formato GUID). Obligatorio para la concesión password.
refresh_tokenstringToken de actualización anterior. Obligatorio para la concesión refresh_token.
client_idstringSu ID de cliente de Mailpro (entero). Obligatorio para la concesión client_credentials.

Respuestas

CódigoDescripción
200Token emitido correctamente. Devuelto por POST /v3/token tras seguir de forma transparente la redirección 307 — su cliente HTTP ve una respuesta 200 normal con la misma forma de cuerpo que recibiría directamente del endpoint de tokens v3.
307Redirección temporal a POST /v3/token, emitida por la regla de reescritura de IIS en web.config. Los clientes HTTP conformes con el estándar la siguen automáticamente y conservan el método POST original y el cuerpo del formulario. Solo es visible para los clientes que desactivan explícitamente el seguimiento de redirecciones (p. ej. curl --max-redirs 0).
400Credenciales no válidas o tipo de concesión no admitido

Ejemplo 200

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "expires_in": 31535999,
  "userName": "12345",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "application": null
}

Ejemplo 400

{
  "error": "invalid_grant",
  "error_description": "The username or password is incorrect."
}

Account

Consulte su saldo de créditos de correo, su cuota mensual de API y el estado de su suscripción.

GET /account/credits.{format}

Obtener saldo de créditos de correo

Devuelve el saldo restante de créditos de correo de su cuenta de Mailpro. Cada correo enviado consume un crédito. Los créditos no expiran con la suscripción, pero solo pueden utilizarse mientras esta esté activa.

Scope OAuth : account:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Respuestas

CódigoDescripción
200Saldo de créditos devuelto correctamente
401Credenciales no válidas

Ejemplo 200

{
  "Credits": 48500
}

GET /account/subscriptionEndDate.{format}

Obtener fecha de finalización de la suscripción

Devuelve la fecha de caducidad de la suscripción actual de Mailpro. Después de la fecha de caducidad, los envíos quedan bloqueados hasta que se renueve la suscripción.

Scope OAuth : account:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Respuestas

CódigoDescripción
200Fecha de finalización de la suscripción devuelta correctamente
401Credenciales no válidas

Ejemplo 200

{
  "SubscriptionEndDate": "2027-01-15T00:00:00"
}

GET /account/limits.{format}

Obtener cuota mensual de API

Devuelve la cuota mensual de solicitudes de API del cliente autenticado.

Cálculo de la cuota: el límite se calibra a partir de los créditos de correo de la suscripción (normalmente subscription_credits × 5). Para un plan de 10 000 correos al mes, esto da un presupuesto mensual de 50 000 solicitudes. Se restablece en la fecha de aniversario de la suscripción (no el día 1 del mes natural).

Qué consume créditos:

Qué es GRATIS (no consume créditos):

La cuota se comparte entre las 3 APIs de Mailpro (v2, v3, sms) — un cliente = un presupuesto mensual para toda la plataforma.

Scope OAuth : account:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Respuestas

CódigoDescripción
200Instantánea de la cuota
401Credenciales no válidas
404No se ha encontrado registro de cuota (cuenta recién creada; la fila se creará en la primera solicitud autenticada).

Ejemplo 200

{
  "MonthlyLimit": 50000,
  "Remaining": 32847,
  "Used": 17153,
  "IsFree": false,
  "RemainedSendsForFree": 0
}

Lists

Gestione las listas (listas de contactos). Una lista agrupa contactos para campañas masivas. Máximo de 1000 listas por cuenta (mismo límite en las tres API de Mailpro y en la app). Type 0 = lista estándar. Type 1 = lista negra (utilizada para la gestión de bajas).

GET /list/list.{format}

Listar todas las listas

Devuelve todas las listas de la cuenta, ordenadas por fecha de creación (las más recientes primero), a menos que se haya establecido sortByName=true. Utilice type=0 para las listas normales o type=1 para las listas negras.

> Alias heredado: /addressbook/list.{format} — mismo endpoint, mantenido por > compatibilidad retroactiva. Las nuevas integraciones deben utilizar /list/*.

Scope OAuth : contacts:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
titleFilterquerystringFiltrar por título (coincidencia parcial, no distingue mayúsculas y minúsculas)
typequeryinteger: 0, 10 = solo listas estándar, 1 = solo listas negras. Omítalo para devolver todas.
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.
sortByNamequerybooleanEstablezca true para ordenar los resultados alfabéticamente por título

Respuestas

CódigoDescripción
200Listas devueltas correctamente. > La respuesta también contiene un campo duplicado heredado AddressBookList (contenido idéntico) > y cada elemento incluye un duplicado heredado AddressBookID (idéntico a ListID). Las nuevas > integraciones deben ignorarlos.
401Credenciales no válidas

Ejemplo 200

{
  "Lists": [
    {
      "ListID": 101,
      "Title": "Newsletter — France",
      "Type": 0,
      "NumberEmails": 4521,
      "CreationDate": "2025-01-15T10:30:00"
    },
    {
      "ListID": 102,
      "Title": "Unsubscribers",
      "Type": 1,
      "NumberEmails": 312,
      "CreationDate": "2025-01-15T10:31:00"
    }
  ]
}

POST /list/add.{format}

Crear una lista

Crea una nueva lista (lista de contactos). La lista comienza vacía — añada contactos con /email/add o /email/addSingle. Máximo de 1000 listas por cuenta (mismo límite en las tres API de Mailpro y en la app). Devuelve HTTP 422 si se alcanza el límite.

> Alias heredado: /addressbook/add.{format} — mismo endpoint, mantenido por compatibilidad retroactiva.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
TitlestringsíNombre para mostrar de la nueva lista
Typeinteger: 0, 10 = lista estándar (predeterminado), 1 = lista negra

Respuestas

CódigoDescripción
200Lista creada correctamente. > También se devuelve un campo duplicado heredado AddressBookList (contenido idéntico).
400Falta el Title
401Credenciales no válidas
422Límite de listas (1000) alcanzado

Ejemplo 200

{
  "Lists": [
    {
      "ListID": 103,
      "Title": "Spring Campaign 2026",
      "Type": 0,
      "NumberEmails": 0,
      "CreationDate": "2026-04-14T12:00:00"
    }
  ]
}

POST /list/edit.{format}

Renombrar una lista

Actualiza el título de una lista existente. Los contactos que contiene no se ven afectados.

> Alias heredado: /addressbook/edit.{format} — mismo endpoint, mantenido por compatibilidad retroactiva. > El nombre de parámetro AddressBookID también se acepta como alias heredado de ListID.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
ListIDintegersíID de la lista que se va a renombrar (de /list/list). También se acepta el alias heredado AddressBookID.
TitlestringsíNuevo título de la lista

Respuestas

CódigoDescripción
200Lista renombrada correctamente
400Falta ListID o Title
401Credenciales no válidas
404Lista no encontrada

POST /list/del.{format}

Eliminar una lista

Elimina permanentemente una lista y todos los contactos que contiene. Esta acción no se puede deshacer.

> Alias heredado: /addressbook/del.{format} — mismo endpoint, mantenido por compatibilidad retroactiva. > El nombre de parámetro AddressBookID también se acepta como alias heredado de ListID.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
ListIDintegersíID de la lista que se va a eliminar. También se acepta el alias heredado AddressBookID.

Respuestas

CódigoDescripción
200Lista eliminada correctamente
400Falta ListID
401Credenciales no válidas
404Lista no encontrada

Ejemplo 200

{
  "Result": "OK"
}

Contacts

Gestione contactos de correo individualmente. Los contactos pertenecen a una o varias listas. Utilice la importación masiva (/email/add) para grandes lotes, o la adición de un único contacto (/email/addSingle) para inscripciones individuales con valores de campos personalizados.

GET /email/list.{format}

Listar contactos

Devuelve una lista paginada de contactos de correo de la cuenta. Filtre por lista o por patrón de correo. Los resultados se ordenan alfabéticamente cuando sortByName=true; de lo contrario, por orden de inserción.

Scope OAuth : contacts:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
emailFilterquerystringFiltrar por dirección de correo (coincidencia parcial, no distingue mayúsculas y minúsculas)
listIdqueryintegerDevolver solo los contactos de esta lista. También se acepta el alias heredado addressBookId.
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.
sortByNamequerybooleanEstablezca true para ordenar los resultados alfabéticamente por dirección de correo

Respuestas

CódigoDescripción
200Lista de contactos devuelta correctamente
401Credenciales no válidas

Ejemplo 200

{
  "Emails": [
    {
      "IdEmail": 10001,
      "Email": "[email protected]",
      "Field1": "Alice",
      "Field2": "Dupont"
    }
  ]
}

POST /email/add.{format}

Importar contactos (masivo)

Importa una o varias direcciones de correo en una lista en una única solicitud. Proporcione las direcciones en EmailList separadas por punto y coma.

Ejemplo: [email protected];[email protected];[email protected]

Este endpoint solo importa direcciones de correo. Para establecer también valores de campos personalizados, utilice /email/addSingle para cada contacto.

Las direcciones dadas de baja anteriormente se omiten silenciosamente a menos que se establezca Force=1.

Selección de lista: proporcione ListId (o su alias heredado AddressBookId). Es necesario al menos uno.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
ListIdintegerID de la lista de destino. También se acepta el alias heredado AddressBookId.
EmailListstringsíDirecciones de correo separadas por punto y coma que se van a importar
Forceinteger: 0, 1Establezca 1 para volver a importar direcciones que se habían dado de baja anteriormente. Predeterminado: 0 (las direcciones dadas de baja se omiten).

Respuestas

CódigoDescripción
200Contactos importados correctamente
400Falta EmailList
401Credenciales no válidas

Ejemplo 200

{
  "Result": "3 contacts imported"
}

POST /email/addSingle.{format}

Añadir un único contacto

Añade un contacto a una lista con valores de campos personalizados opcionales.

Field1 a Field25 se asignan a las definiciones de columnas personalizadas de su lista. La asignación depende del orden en que se hayan definido las columnas — consulte la configuración de su lista en la interfaz de Mailpro para ver qué número de campo corresponde a cada columna (por ejemplo, Field1 = FirstName, Field2 = LastName, Field3 = City…).

Selección de lista: proporcione ListId (o su alias heredado AddressBookId).

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
ListIdintegerID de la lista de destino. También se acepta el alias heredado AddressBookId.
EmailstringsíDirección de correo del nuevo contacto
Forceinteger: 0, 1Establezca 1 para volver a añadir una dirección dada de baja anteriormente
Field1stringValor del campo personalizado 1 (la asignación de columnas depende de su lista)
Field2stringValor del campo personalizado 2
Field3stringValor del campo personalizado 3
Field4stringValor del campo personalizado 4
Field5stringValor del campo personalizado 5

Respuestas

CódigoDescripción
200Contacto añadido correctamente
400Falta Email
401Credenciales no válidas

Ejemplo 200

{
  "EmailId": 10002,
  "Email": "[email protected]",
  "Field1": "Alice",
  "Field2": "Dupont",
  "ListID": 101
}

POST /email/edit.{format}

Actualizar un contacto

Actualiza la dirección de correo o los valores de los campos personalizados de un contacto existente. Identifique el contacto mediante EmailId (de /email/list). Tanto EmailId como Email son obligatorios.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
EmailIdintegersíID del contacto que se va a actualizar (de /email/list)
EmailstringsíNueva dirección de correo del contacto
Field1stringNuevo valor del campo personalizado 1
Field2stringNuevo valor del campo personalizado 2
Field3stringNuevo valor del campo personalizado 3

Respuestas

CódigoDescripción
200Contacto actualizado correctamente
400Falta EmailId o Email
401Credenciales no válidas
404Contacto no encontrado

POST /email/del.{format}

Eliminar un contacto

Elimina permanentemente un contacto por su identificador único.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
EmailIdintegersíID del contacto que se va a eliminar (de /email/list)

Respuestas

CódigoDescripción
200Contacto eliminado correctamente
400Falta EmailId
401Credenciales no válidas
404Contacto no encontrado

Messages

Gestione plantillas de correo HTML. Una plantilla de mensaje almacena el asunto del correo, el cuerpo HTML y la configuración del enlace de baja. Las plantillas se reutilizan en distintas campañas.

GET /message/list.{format}

Listar plantillas de mensaje

Devuelve las plantillas de correo HTML guardadas de la cuenta. De forma predeterminada, el cuerpo HTML no se incluye en la respuesta para mantener cargas útiles pequeñas. Establezca bodyHTML=true para incluirlo (limita automáticamente los resultados a 10 por página).

Scope OAuth : email:templates:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
subjectFilterquerystringFiltrar por asunto (coincidencia parcial, no distingue mayúsculas y minúsculas)
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.
bodyHTMLquerybooleanEstablezca true para incluir el cuerpo HTML completo en cada resultado. Cuando es true, los resultados se limitan automáticamente a 10 por página, independientemente de numberOfRecords.

Respuestas

CódigoDescripción
200Plantillas de mensaje devueltas correctamente
401Credenciales no válidas

Ejemplo 200

{
  "MessageList": [
    {
      "IDMessage": 501,
      "Subject": "Spring Newsletter — April 2026",
      "Language": "EN",
      "LinkAlign": "center",
      "LinkUp": 0,
      "UpdateDate": "2026-03-10T14:22:00"
    }
  ]
}

POST /message/add.{format}

Crear una plantilla de mensaje

Crea una nueva plantilla de correo HTML. La plantilla almacena el asunto, el cuerpo HTML y los ajustes del enlace de baja. Una vez creada, utilice el IDMessage devuelto al lanzar una campaña.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
SubjectstringsíAsunto del correo electrónico (máx. 255 caracteres)
BodyHTMLstringsíContenido HTML completo del cuerpo del correo
LanguagestringsíCódigo de idioma para la localización del enlace de baja (p. ej. EN, FR, DE)
LinkAlignstring: left, center, rightsíAlineación horizontal del enlace de baja
LinkUpinteger: 0, 1síPosición del enlace de baja — 0 = parte inferior del correo, 1 = parte superior

Respuestas

CódigoDescripción
200Plantilla de mensaje creada correctamente
400Falta un campo obligatorio
401Credenciales no válidas

Ejemplo 200

{
  "IDMessage": 502,
  "Subject": "Spring Newsletter — April 2026",
  "Language": "EN",
  "LinkAlign": "center",
  "LinkUp": 0
}

POST /message/edit.{format}

Actualizar una plantilla de mensaje

Actualiza el contenido y los metadatos de una plantilla de mensaje existente.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
MessageIdintegersíID de la plantilla de mensaje que se va a actualizar (de /message/list)
SubjectstringsíNuevo asunto del correo electrónico
BodyHTMLstringsíNuevo contenido HTML del cuerpo del correo
LanguagestringsíCódigo de idioma para la localización del enlace de baja
LinkAlignstring: left, center, rightsí
LinkUpinteger: 0, 1sí

Respuestas

CódigoDescripción
200Plantilla de mensaje actualizada correctamente
400Falta un campo obligatorio
401Credenciales no válidas
404Plantilla de mensaje no encontrada

POST /message/del.{format}

Eliminar una plantilla de mensaje

Elimina permanentemente una plantilla de mensaje por su identificador único. No se pueden eliminar las plantillas utilizadas por campañas programadas pendientes.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
MessageIdintegersíID de la plantilla de mensaje que se va a eliminar (de /message/list)

Respuestas

CódigoDescripción
200Plantilla de mensaje eliminada correctamente
400Falta MessageId
401Credenciales no válidas
404Plantilla de mensaje no encontrada

Campaigns

Envíe campañas masivas de correo a una lista y gestione los envíos programados. Una campaña utiliza una plantilla de mensaje y una dirección de remitente.

GET /send/list.{format}

Listar campañas programadas

Devuelve la lista de campañas de correo programadas y procesadas recientemente. Los resultados se ordenan por fecha de envío prevista (las más recientes primero).

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
subjectMessageFilterquerystringFiltrar por asunto de la campaña (coincidencia parcial, no distingue mayúsculas y minúsculas)
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.

Respuestas

CódigoDescripción
200Lista de campañas devuelta correctamente
401Credenciales no válidas

Ejemplo 200

{
  "sends": [
    {
      "IDSend": 3001,
      "ListID": 101,
      "SenderEmail": "[email protected]",
      "SenderName": "Your Company Newsletter",
      "DatePlanned": "2026-04-20T09:00:00",
      "SubjectMessage": "Spring Newsletter — April 2026",
      "NumberCredit": 4521
    }
  ]
}

POST /send/campaign.{format}

Lanzar una campaña

Programa o envía inmediatamente una campaña de correo a una lista utilizando una plantilla de mensaje guardada y una dirección de remitente.

Obligatorio:

Programación: establezca DatePlanned en una fecha/hora ISO 8601 futura para programar el envío. Omita DatePlanned para enviar inmediatamente.

Seguimiento de estadísticas: establezca Campaign=1 y proporcione un TitleCampaign para activar el seguimiento de aperturas/clics/rebotes en la sección Estadísticas.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
ListIdintegerID de la lista de destinatarios (de /list/list). También se acepta el alias heredado IDAddressBook.
IDMessageintegersíID de la plantilla de mensaje que se va a enviar (de /message/list)
IDEmailExpintegersíID de la dirección de correo del remitente que se va a utilizar (de /senderEmail/list)
IDUnsubscribeListintegerLista utilizada para recopilar los contactos dados de baja (lista negra). También se acepta el alias heredado IDUnsubscribeAddressBook.
DatePlannedstring (date-time)Fecha/hora de envío programadas (ISO 8601). Omítalo para enviar inmediatamente.
Campaigninteger: 0, 1Establezca 1 para realizar el seguimiento de este envío como una campaña con nombre en las estadísticas
TitleCampaignstringTítulo de la campaña mostrado en las estadísticas (obligatorio cuando Campaign=1)

Respuestas

CódigoDescripción
200Campaña programada o enviada correctamente. > La respuesta también devuelve los alias heredados AddressBookID y UnsubscribeAddressBookID > (idénticos a ListID / UnsubscribeListID). Las nuevas integraciones deben ignorarlos.
400Falta IDMessage o IDEmailExp
401Credenciales no válidas
403Créditos de correo insuficientes
404Lista, mensaje o remitente no encontrados

Ejemplo 200

{
  "send": {
    "IDSend": 3002,
    "ListID": 101,
    "UnsubscribeListID": 102,
    "IDCampaign": 8001,
    "SenderName": "Your Company Newsletter",
    "SenderEmail": "[email protected]",
    "DatePlanned": "2026-04-20T09:00:00",
    "SubjectMessage": "Spring Newsletter — April 2026",
    "NumberCredit": 4521
  }
}

POST /send/del.{format}

Cancelar o eliminar una campaña

Cancela un envío de campaña programado pendiente o elimina uno completado. Solo se pueden cancelar los envíos programados para una fecha futura — los envíos en curso no se pueden detener.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
IdSendintegersíID del envío de campaña que se va a cancelar o eliminar (de /send/list)

Respuestas

CódigoDescripción
200Campaña cancelada o eliminada correctamente
400Falta IdSend
401Credenciales no válidas
404Campaña no encontrada

Ejemplo 200

{
  "Result": "Campaign Deleted"
}

GET /send/scheduled.{format}

Listar mis campañas de correo programadas

Devuelve las campañas de correo y los envíos individuales programados para una fecha futura que aún no se han enviado. Útil antes de llamar a /cancel o /reschedule. Los registros se ordenan por DatePlanned en orden ascendente.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.

Respuestas

CódigoDescripción
200Lista de campañas / envíos programados. > Cada registro también incluye los alias heredados AddressBookID y > UnsubscribeAddressBookID (idénticos a ListID / UnsubscribeListID).
401Credenciales no válidas

Ejemplo 200

{
  "sends": [
    {
      "IDSend": 5001,
      "ListID": 101,
      "UnsubscribeListID": 102,
      "IDCampaign": 8001,
      "SenderName": "Your Company Newsletter",
      "SenderEmail": "[email protected]",
      "DatePlanned": "2026-05-01T09:00:00",
      "SubjectMessage": "Spring Sale 2026",
      "NumberCredit": 4521
    }
  ]
}

POST /send/{IdSend}/cancel.{format}

Cancelar una campaña / envío programado

Cancela un envío de correo programado (campaña o individual) que aún no se ha despachado. Si el envío ya se ha enviado (o no existe / pertenece a otro cliente), devuelve 409 Conflict.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSendpathintegersí

Respuestas

CódigoDescripción
200Envío cancelado
401Credenciales no válidas
409Ya enviado o no encontrado

Ejemplo 200

{
  "Result": "OK",
  "Cancelled": 5001
}

PATCH /send/{IdSend}/reschedule.{format}

Reprogramar una campaña / envío programado

Actualiza el DatePlanned de un envío de correo programado. La nueva fecha debe ser futura y estar dentro de los próximos 90 días.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSendpathintegersí

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
PlanDatestring (date-time)sí

Respuestas

CódigoDescripción
200Envío reprogramado
400PlanDate no proporcionado o no válido
401Credenciales no válidas
409Ya enviado, no encontrado o nueva fecha fuera de rango (debe ser futura y estar dentro de los próximos 90 días)

Ejemplo 200

{
  "Result": "OK",
  "IdSend": 5001,
  "NewPlanDate": "2026-12-31T14:30:00"
}

POST /send/sendingTest.{format}

Enviar un correo de prueba

Envía una vista previa de una plantilla de mensaje a un destinatario especificado para su revisión antes de lanzar la campaña real. El remitente, la plantilla y el destinatario de la prueba se identifican mediante sus ID.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
MessageIdintegersíID de la plantilla de mensaje que se va a previsualizar (de /message/list)
IDEmailExpFromintegersíID de la dirección de remitente que se va a utilizar (de /senderEmail/list)
IDEmailExpTointegersíID de la dirección de remitente destinataria — el correo de prueba se envía a esta dirección

Respuestas

CódigoDescripción
200Correo de prueba enviado correctamente
400Falta un campo obligatorio
401Credenciales no válidas

Ejemplo 200

{
  "SendingTest": {
    "IdSendingTest": 7001,
    "ToEmail": "[email protected]",
    "FromEmail": "[email protected]",
    "SenderName": "Your Company Newsletter"
  }
}

Transactional

Envíe correos transaccionales puntuales a destinatarios individuales. A diferencia de las campañas, los correos transaccionales no requieren una lista: se pasan directamente el correo del destinatario y el cuerpo HTML.

GET /send/mail/scheduled.{format}

Listar los correos individuales programados

Devuelve los correos individuales enviados con /send/sendmail y una fecha futura que aún no han salido. Las campañas se listan con /send/scheduled.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Respuestas

CódigoDescripción
200Correos programados devueltos
401Credenciales no válidas

Ejemplo 200

{
  "scheduledMails": [
    {
      "IdSingleSend": 880123,
      "Email": "[email protected]",
      "Subject": "Your invoice",
      "DatePlanned": "2026-12-01T09:00:00"
    }
  ]
}

POST /send/mail/{IdSingleSend}/cancel.{format}

Cancelar un correo individual programado

Cancela el correo mientras no haya salido.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSingleSendpathinteger (int64)síIdSingleSend devuelto por /send/sendmail

Respuestas

CódigoDescripción
200Correo cancelado
401Credenciales no válidas
409Envío no encontrado o ya realizado

Ejemplo 200

{
  "Result": "OK",
  "Cancelled": 880123
}

POST /send/mail/{IdSingleSend}/reschedule.{format}

Reprogramar un correo individual programado

Cambia la fecha de envío. La nueva fecha debe ser futura y estar dentro de 90 días. También se acepta PATCH.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSingleSendpathinteger (int64)síIdSingleSend devuelto por /send/sendmail

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
PlanDatestring (date-time)síNueva fecha de envío (ISO 8601)

Respuestas

CódigoDescripción
200Correo reprogramado
400Fecha ausente o no válida
401Credenciales no válidas
409Envío no encontrado, ya realizado o fecha fuera de los límites

Ejemplo 200

{
  "Result": "OK",
  "IdSingleSend": 880123,
  "NewPlanDate": "2026-12-15T09:00:00"
}

POST /send/sendmail.{format}

Enviar un correo transaccional

Envía un correo transaccional puntual a uno o varios destinatarios. A diferencia de las campañas, este endpoint no requiere una lista — la dirección del destinatario y el cuerpo HTML se pasan directamente.

Obligatorio:

Formato de EmailData: [email protected],Alice,Dupont,Paris El primer valor es la dirección de correo; los valores 2 a 26 se asignan a Field1–Field25 para las variables de personalización de su plantilla HTML.

Múltiples destinatarios: separe varias entradas de EmailData con punto y coma: [email protected],Alice;[email protected],Bob

Programación: establezca DatePlanned en una fecha/hora ISO 8601 futura, u omítalo para enviar inmediatamente.

Scope OAuth : email:send

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (multipart/form-data)

NombreTipoObligatorioDescripción
IDEmailExpintegersíID de la dirección de correo del remitente que se va a utilizar (de /senderEmail/list)
EmailDatastringsíDestinatario en formato email,campo1,campo2,...,campo25 (separados por comas). El primer valor es la dirección de correo; los demás son campos de personalización asignados a Field1–Field25 en tu plantilla HTML. La parte local del correo (antes de @) acepta letras, dígitos y . _ - + — incluido el sub-addressing RFC 5322 (user+tag@domain, p. ej. Gmail, Fastmail, Proton). Los demás caracteres especiales que permite la RFC 5322 (p. ej. ! # $ % & ' * / = ? ^ { | } ~) y las partes locales entre comillas no se aceptan.
BodyHTMLstringsíContenido HTML completo del cuerpo del correo
SubjectstringsíAsunto del correo electrónico (máx. 255 caracteres)
attachmentsarray of string (binary)Archivos adjuntos opcionales — envía la solicitud como multipart/form-data y añade una parte de archivo por adjunto (cualquier nombre de campo). Hasta 5 archivos, 10 MB por archivo, 15 MB en total. Tipos aceptados: PDF, Word, Excel, PowerPoint, imágenes (JPG, PNG, GIF, WebP), ZIP, CSV, TXT — los archivos ejecutables y scripts se rechazan. Facturación: el envío mantiene su crédito habitual, más 1 crédito por cada 512 KB de adjuntos más allá de los primeros 512 KB (los adjuntos ≤ 512 KB no añaden nada). Todos los demás campos de este endpoint (ReplyTo, ActivateStatistics, CustomHeaders, …) funcionan exactamente igual que en la variante form-urlencoded.
KeepInMyFilesbooleanfalse (por defecto): los archivos adjuntos solo se usan para este envío — se almacenan fuera de su cuenta, no cuentan en su cuota de almacenamiento y se eliminan automáticamente después de 35 días. true: los archivos adjuntos también se guardan en los archivos de su cuenta (carpeta Secure/Files/Sending/api) y cuentan en su cuota de almacenamiento.

Respuestas

CódigoDescripción
200Correo transaccional enviado o programado correctamente
400Falta un campo obligatorio o formato de correo no válido
401Credenciales no válidas
403Créditos de correo insuficientes
404Remitente no encontrado o dirección de correo dada de baja

Ejemplo 200

{
  "SingleSend": {
    "IdSingleSend": 8001,
    "IdEmailExp": 201,
    "DatePlanned": "2026-04-15T14:30:00",
    "Subject": "Your order #12345 is confirmed",
    "Email": "[email protected]",
    "Field1": "Alice",
    "Field2": "Dupont",
    "UnsubscriptionLink": false,
    "ActivateStatistics": true
  }
}

GET /send/{IdSend}/status.{format}

Obtener el estado de entrega de un correo transaccional

Devuelve el estado de entrega actual de un correo transaccional enviado con /send/sendmail. Pase el IdSingleSend que devolvió esa llamada.

Valores posibles: delivered (aceptado por el servidor del destinatario, véase DiagCode), bounced (rechazado — BounceType: hard dirección no válida o rechazo definitivo, soft rechazo tras nuevos intentos), sent (entregado al servidor de correo, aún sin respuesta), scheduled (aún no enviado, DatePlanned en el futuro) y queued (en espera de envío). delivered y bounced son finales: deje de consultar. Cada email tiene un estado final como máximo 48 horas después del envío; consulte cada 15 minutos como máximo (cada llamada cuenta en su cuota de la API) o utilice los webhooks email.delivered / email.bounced. Solo el cliente que envió el email puede leer su estado — cualquier otro id devuelve 404.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSendpathintegersíEl IdSingleSend devuelto por /send/sendmail.

Respuestas

CódigoDescripción
200Estado de entrega actual
401Credenciales no válidas
404No se encontró ningún envío transaccional con este id para este cliente

Ejemplo 200

{
  "status": {
    "IdSingleSend": 8001,
    "Email": "[email protected]",
    "Status": "delivered",
    "DatePlanned": "2026-04-15T14:30:00",
    "StatusDate": "2026-04-15T14:30:07",
    "DiagCode": "2.0.0 (success)",
    "BounceType": null
  }
}

Sender Addresses

Liste y gestione las direcciones de correo de remitente validadas. Solo las direcciones verificadas pueden utilizarse como dirección From en las campañas.

GET /senderEmail/list.{format}

Listar direcciones de remitente validadas

Devuelve la lista de direcciones de correo de remitente configuradas para la cuenta. Solo las direcciones con IsValid: true se pueden utilizar al enviar campañas. Las nuevas direcciones se añaden con /senderEmail/add y son válidas una vez que se hace clic en el enlace del correo de validación.

Scope OAuth : email:templates:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
emailFilterquerystringFiltrar por dirección de correo (coincidencia parcial, no distingue mayúsculas y minúsculas)
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.
sortByNamequerybooleanEstablezca true para ordenar los resultados alfabéticamente por nombre del remitente

Respuestas

CódigoDescripción
200Direcciones de remitente devueltas correctamente
401Credenciales no válidas

Ejemplo 200

{
  "ExpEmailList": [
    {
      "IDEmailExp": 201,
      "Email": "[email protected]",
      "SenderName": "Your Company Newsletter",
      "IsValid": true,
      "CreationDate": "2025-06-01T09:00:00"
    },
    {
      "IDEmailExp": 202,
      "Email": "[email protected]",
      "SenderName": "Your Company Support",
      "IsValid": true,
      "CreationDate": "2025-06-01T09:05:00"
    }
  ]
}

POST /senderEmail/add.{format}

Añadir una dirección de remitente

Añade la dirección con los mismos controles que la aplicación y le envía un correo de validación. Se puede utilizar una vez que se haga clic en el enlace de ese correo. Una cuenta puede tener hasta 25 remitentes, validados o pendientes.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
EmailstringsíDirección del remitente
SenderNamestringsíNombre mostrado a los destinatarios

Respuestas

CódigoDescripción
200Dirección añadida. DomainHasMx es false cuando el dominio no tiene registro MX.
400Falta Email o SenderName
401Credenciales no válidas
422Dirección rechazada: no válida, ya entre los remitentes de la cuenta, dominio de correo público, nombre prohibido o límite de 25 alcanzado. El mensaje indica el motivo.
503No disponible temporalmente, inténtelo de nuevo

Ejemplo 200

{
  "Result": "OK",
  "ConfirmationSent": true,
  "DomainHasMx": true
}

POST /senderEmail/{IdSenderEmail}/resendValidation.{format}

Enviar de nuevo el correo de validación

Para una dirección que aún espera la validación.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSenderEmailpathintegersíID del remitente, de /senderEmail/list

Respuestas

CódigoDescripción
200Correo enviado de nuevo
401Credenciales no válidas
404Remitente no encontrado
409Este remitente ya está validado
503No disponible temporalmente, inténtelo de nuevo

Ejemplo 200

{
  "Result": "OK",
  "ConfirmationSent": true
}

GET /senderEmail/{IdSenderEmail}/authentication.{format}

Comprobar el dominio de un remitente (SPF, DKIM, DMARC, MX)

Comprueba el dominio en directo en el DNS y devuelve los registros que hay que publicar. Solo lectura. El DKIM se activa en la aplicación: DkimSettingsUrl abre la pantalla correcta.

Scope OAuth : email:templates:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
IdSenderEmailpathintegersíID del remitente, de /senderEmail/list

Respuestas

CódigoDescripción
200Estado del dominio. Spf.RecommendedRecord se crea a partir de su registro actual: publíquelo solo si Spf.ChangeNeeded es true.
401Credenciales no válidas
404Remitente no encontrado
503No disponible temporalmente, inténtelo de nuevo

Ejemplo 200

{
  "Domain": "example.com",
  "Spf": {
    "Valid": true,
    "Record": "v=spf1 include:spf.mailpro.com -all",
    "RecommendedRecord": "v=spf1 include:spf.mailpro.com -all",
    "ChangeNeeded": false
  },
  "Dkim": {
    "Valid": true,
    "Records": [
      {
        "Host": "key._domainkey.example.com",
        "Value": "v=DKIM1;k=rsa;p=MIIBIjANBgkq...",
        "Validated": true
      }
    ]
  },
  "Dmarc": {
    "Valid": true,
    "Record": "v=DMARC1; p=quarantine"
  },
  "Mx": {
    "Valid": true,
    "Record": "mail.example.com"
  },
  "DkimSettingsUrl": "https://app.mailpro.com/dkim/list?d=example.com"
}

POST /senderEmail/del.{format}

Eliminar una dirección de remitente

Elimina una dirección de correo de remitente validada de la cuenta. No se pueden eliminar las direcciones de remitente utilizadas por campañas programadas.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
idEmailExpintegersíID de la dirección de remitente que se va a eliminar (de /senderEmail/list)

Respuestas

CódigoDescripción
200Dirección de remitente eliminada correctamente
400Falta idEmailExp
401Credenciales no válidas

Ejemplo 200

{
  "Result": "EmailSender Deleted"
}

Statistics

Acceda a las métricas de rendimiento por campaña: aperturas, clics, rebotes y más. Disponibles desgloses detallados por hora, día, país, sistema operativo y cliente de correo.

GET /stats/list.{format}

Listar estadísticas de campañas

Devuelve las métricas de rendimiento globales de todas las campañas: número de envíos, tasa de apertura, tasa de clics, número de rebotes. Filtre por rango de fechas o título de campaña. Los resultados se ordenan por fecha de envío (los más recientes primero).

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
titleCampaignFilterquerystringFiltrar por título de la campaña (coincidencia parcial, no distingue mayúsculas y minúsculas)
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.
dateStartquerystring (date-time)Inicio del filtro de rango de fechas (ISO 8601)
dateEndquerystring (date-time)Fin del filtro de rango de fechas (ISO 8601)

Respuestas

CódigoDescripción
200Estadísticas de campaña devueltas correctamente
401Credenciales no válidas

Ejemplo 200

{
  "Campaigns": [
    {
      "IdCampaign": 8001,
      "DateCampaign": "2026-04-20T09:00:01",
      "TitleCampaign": "Spring Newsletter April 2026",
      "NumberEmailSend": 4521,
      "NumberEmailOpen": 1823,
      "NumberEmailClick": 342,
      "BadMail": 12,
      "NumberUnsubscribers": 8,
      "NumberComplaints": 1,
      "SpamTrap": 0,
      "DeliverabilityScore": 98
    }
  ]
}

GET /stats/byHour.{format}

Estadísticas por hora

Devuelve el desglose por hora de aperturas y clics de una campaña concreta. Útil para comprender el momento óptimo de envío.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersíID de la campaña (de /stats/list)

Respuestas

CódigoDescripción
200Estadísticas por hora devueltas correctamente
401Credenciales no válidas

Ejemplo 200

{
  "ByHour": [
    {
      "Hour": 9,
      "Opens": 823,
      "Clicks": 142
    },
    {
      "Hour": 10,
      "Opens": 512,
      "Clicks": 98
    }
  ]
}

GET /stats/byDay.{format}

Estadísticas por día

Devuelve el desglose diario de aperturas y clics de una campaña concreta.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersíID de la campaña (de /stats/list)

Respuestas

CódigoDescripción
200Estadísticas diarias devueltas correctamente
401Credenciales no válidas

POST /stats/del.{format}

Eliminar estadísticas de campaña

Elimina permanentemente todos los registros estadísticos de una campaña determinada.

Scope OAuth : email:templates:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
IdCampaignintegersíID de la campaña cuyas estadísticas se van a eliminar (de /stats/list)

Respuestas

CódigoDescripción
200Estadísticas de campaña eliminadas correctamente
400Falta IdCampaign
401Credenciales no válidas
404Campaña no encontrada

Ejemplo 200

{
  "Result": "Statistic Deleted"
}

GET /stats/country.{format}

Desglose por geolocalización

Devuelve el desglose por geolocalización de las aperturas de campaña — cuántas aperturas proceden de cada país.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersí

Respuestas

CódigoDescripción
200Desglose por país devuelto
401Credenciales no válidas

GET /stats/open.{format}

Registro de eventos de apertura

Devuelve el registro por destinatario de los eventos de apertura de una campaña (una fila por apertura). Utilice emailFilter para buscar un destinatario concreto (coincidencia parcial, no distingue mayúsculas y minúsculas).

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersí
emailFilterquerystring
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.

Respuestas

CódigoDescripción
200Eventos de apertura devueltos
401Credenciales no válidas

GET /stats/click.{format}

Registro de eventos de clic

Devuelve el registro por destinatario de los eventos de clic de una campaña — incluyendo qué enlace se ha pulsado y cuándo.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersí
emailFilterquerystring
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.

Respuestas

CódigoDescripción
200Eventos de clic devueltos
401Credenciales no válidas

GET /stats/system.{format}

Desglose por sistema operativo

Devuelve el desglose de las aperturas por sistema operativo (Windows, macOS, iOS, Android, Linux, etc.) para una campaña determinada.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersí

Respuestas

CódigoDescripción
200Desglose por SO devuelto
401Credenciales no válidas

GET /stats/emailSoftware.{format}

Desglose por cliente de correo

Devuelve el desglose de las aperturas por cliente de correo (Gmail, Outlook, Apple Mail, Thunderbird, etc.) para una campaña determinada.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersí

Respuestas

CódigoDescripción
200Desglose por cliente de correo devuelto
401Credenciales no válidas

GET /stats/bounce.{format}

Registro de rebotes

Devuelve la lista de destinatarios rebotados (rebotes duros, rebotes blandos, quejas de spam) de una campaña, con el motivo del fallo para cada dirección.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
idCampaignqueryintegersí
emailFilterquerystring
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.

Respuestas

CódigoDescripción
200Eventos de rebote devueltos
401Credenciales no válidas

Ejemplo 200

{
  "ListBadMail": [
    {
      "Email": "[email protected]",
      "Date": "2026-04-20T09:05:12",
      "Error": "550 5.1.1 recipient rejected",
      "AddressbookId": 1813318
    }
  ]
}

History

Consulte el registro completo de todos los envíos de correo anteriores.

GET /history/list.{format}

Listar el historial de envíos

Devuelve un registro paginado de todos los envíos de correo anteriores. Filtre por ID de campaña o por asunto. Establezca bodyHTML=true para incluir el cuerpo HTML (limita automáticamente a 10 por página).

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
subjectMessageFilterquerystringFiltrar por asunto de la campaña (coincidencia parcial, no distingue mayúsculas y minúsculas)
idCampaignqueryintegerDevolver el historial solo de una campaña concreta
numberOfRecordsqueryintegerElementos por página — 5000 por defecto y como máximo (véase Paginación).
pageNumberqueryintegerNúmero de página (comienza en 1). El valor predeterminado es 1.
bodyHTMLquerybooleanEstablezca true para incluir el cuerpo HTML completo. Limita automáticamente los resultados a 10 por página.

Respuestas

CódigoDescripción
200Historial devuelto correctamente
401Credenciales no válidas

Ejemplo 200

{
  "HistoricList": [
    {
      "IDHistoric": 9001,
      "SubjectMessage": "Spring Newsletter — April 2026",
      "DateSend": "2026-04-20T09:00:01",
      "NumberSend": 4521,
      "NumberOpen": 1823,
      "NumberClick": 342
    }
  ]
}

Import

Cargue un archivo CSV o XLSX para importar contactos de correo en una lista de forma masiva. El archivo se pone en cola para su procesamiento asíncrono — siga la finalización mediante el ImportJobId devuelto o a través de la devolución de llamada WebhookUrl opcional.

POST /import/upload.{format}

Cargar un archivo de contactos (CSV / XLSX) para importación masiva

Cargue un archivo CSV o XLSX para importar contactos de correo en una lista. El archivo se almacena y se pone en cola para su procesamiento asíncrono — el endpoint devuelve un ImportJobId inmediatamente.

Tipo de solicitud: multipart/form-data

Campos de formulario obligatorios:

Opcional:

Formato del archivo:

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (multipart/form-data)

NombreTipoObligatorioDescripción
ListIdintegersíID de la lista de destino. También se acepta el alias heredado AddressBookId.
filestring (binary)síArchivo CSV o XLSX (UTF-8, máx. 50 MB)
WebhookUrlstring (uri)URL de devolución de llamada invocada cuando finaliza el procesamiento

Respuestas

CódigoDescripción
200Archivo aceptado y puesto en cola
400Ningún archivo cargado o falta ListId
401Credenciales no válidas
500Error del servidor o de almacenamiento

Ejemplo 200

{
  "Result": "OK",
  "ImportJobId": 13,
  "InternalName": "230575-20260420140221-contacts.csv"
}

Webhooks

Suscriba su servidor a notificaciones de eventos en tiempo real. Mailpro envía mediante POST una carga JSON firmada con HMAC a su URL en cuanto se produce el evento suscrito. Consulte la sección «Webhooks» de la introducción para ver el catálogo completo de eventos, el sobre de la carga útil, fragmentos de verificación de firma y la política de reintentos.

GET /webhooks

Listar webhooks

Devuelve todos los webhooks configurados en la cuenta autenticada.

Respuestas

CódigoDescripción
200Matriz de webhooks
401Credenciales no válidas

Ejemplo 200

{
  "items": [
    {
      "id": 14,
      "url": "https://example.com/hooks/mailpro",
      "description": "Integración con Slack",
      "is_active": true,
      "created_at": "2026-07-01T21:09:52.43",
      "updated_at": "2026-07-21T18:56:08.02",
      "last_delivery_at": "2026-07-21T18:56:07.653",
      "last_delivery_status": 200,
      "consecutive_failures": 0,
      "events": [
        "email.delivered",
        "email.bounced"
      ]
    }
  ],
  "total": 1
}

POST /webhooks

Crear un webhook

Crea una nueva suscripción de webhook. La respuesta contiene un secret que se muestra una sola vez — guárdelo de inmediato en el servidor. Úselo para verificar la firma HMAC de cada carga útil entrante.

Límites: máximo 20 webhooks por cuenta, máximo 50 eventos por webhook.

Cuerpo de la solicitud (application/json)

NombreTipoObligatorioDescripción
urlstring (uri)síEndpoint HTTPS (HTTP rechazado en producción)
eventsarray of stringsíLista de tipos de eventos a los que suscribirse (véase el catálogo anterior). Utilice ["*"] para suscribirse a todos los eventos de esta API.
descriptionstring

Ejemplo

{
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "email.delivered",
    "email.bounced"
  ],
  "description": "Integración con Slack"
}

Respuestas

CódigoDescripción
201Webhook creado — el secret solo se devuelve aquí
400URL, lista de eventos no válidas o límite superado
401Credenciales no válidas

Ejemplo 201

{
  "id": 42,
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "email.delivered",
    "email.bounced"
  ],
  "description": "Integración con Slack",
  "isActive": true,
  "consecutiveFailures": 0,
  "autoDisabledAt": null,
  "autoDisabledReason": null,
  "createdAt": "2026-05-25T10:00:00Z",
  "updatedAt": "2026-05-25T10:00:00Z",
  "secret": "whsec_AbcD1234EfgH5678IjkL9012MnoP3456QrsT"
}

GET /webhooks/{id}

Obtener un webhook

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí

Respuestas

CódigoDescripción
200El webhook
404Webhook no encontrado

PUT /webhooks/{id}

Actualizar un webhook

Actualización parcial — solo se modifican los campos enviados.

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí

Cuerpo de la solicitud (application/json)

NombreTipoObligatorioDescripción
urlstring (uri)
eventsarray of string
descriptionstring
isActivebooleanEstablezca true para reactivar un webhook desactivado automáticamente una vez corregido su endpoint.

Respuestas

CódigoDescripción
200Webhook actualizado
400Carga útil no válida
404Webhook no encontrado

DELETE /webhooks/{id}

Eliminar un webhook

Elimina permanentemente el webhook y todo su historial de entregas.

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí

Respuestas

CódigoDescripción
204Eliminado
404Webhook no encontrado

POST /webhooks/{id}/test

Enviar un evento de prueba

Encola un evento ping inmediato (o cualquier otro tipo de evento mediante el campo del cuerpo eventType) a su endpoint. Útil para verificar la accesibilidad y la verificación de firmas antes de depender de eventos reales.

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí

Cuerpo de la solicitud (application/json)

NombreTipoObligatorioDescripción
eventTypestring

Ejemplo

{
  "eventType": "ping"
}

Respuestas

CódigoDescripción
202Evento puesto en cola para su envío
404Webhook no encontrado

Ejemplo 202

{
  "deliveryId": 1234,
  "eventId": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
  "eventType": "ping"
}

POST /webhooks/{id}/rotate-secret

Rotar el secreto HMAC

Genera un nuevo secreto HMAC e invalida el antiguo de inmediato. El nuevo secreto se devuelve una sola vez en la respuesta — guárdelo. A partir de ese momento, todas las entregas se firmarán con el nuevo secreto.

Utilice esta función si sospecha que su secreto ha sido comprometido.

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí

Respuestas

CódigoDescripción
200Nuevo secreto (visible una sola vez)
404Webhook no encontrado

Ejemplo 200

{
  "secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}

GET /webhooks/{id}/deliveries

Listar intentos de entrega

Devuelve el historial de intentos de envío de este webhook (retención de 30 días). Útil para la depuración — qué eventos se enviaron, códigos de estado recibidos, recuentos de reintentos, mensajes de error.

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí
limitqueryinteger
cursorqueryinteger (int64)Cursor de paginación (= último ID de entrega visto). Devuelve las entregas con id < cursor.

Respuestas

CódigoDescripción
200Matriz de intentos de entrega (los más recientes primero)
404Webhook no encontrado

POST /webhooks/{id}/deliveries/{deliveryId}/replay

Reenviar una entrega

Encola un nuevo intento de entrega con la misma carga útil que el original. Útil para volver a desencadenar una entrega fallida tras corregir su endpoint. Se crea una NUEVA fila Webhook_Delivery (la original se conserva para auditoría). El reenvío sigue la política de reintentos estándar (mismo calendario de retroceso, misma regla de desactivación automática tras 10 fallos).

Parámetros

NombreDóndeTipoObligatorioDescripción
idpathinteger (int64)sí
deliveryIdpathinteger (int64)sí

Respuestas

CódigoDescripción
202Reenvío puesto en cola
404Webhook o entrega no encontrados

Suppression

Rebotes y bajas de la cuenta: listar, añadir, eliminar.

GET /suppression/bounces.{format}

Listar los rebotes de la cuenta

Los más recientes primero. El total está en la cabecera X-Total-Count.

Scope OAuth : email:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
typequerystring: hard, softhard o soft
sourcequerystringOrigen del rebote: list, contact, api o smtp
emailquerystringDirección exacta
dateFromquerystring (date-time)A partir de esta fecha
dateToquerystring (date-time)Hasta esta fecha
numberOfRecordsqueryinteger
pageNumberqueryinteger

Respuestas

CódigoDescripción
200Rebotes devueltos
400type debe ser hard o soft
401Credenciales no válidas

Ejemplo 200

{
  "bounces": [
    {
      "Id": 5521,
      "Source": "contact",
      "BounceType": "hard",
      "Email": "[email protected]",
      "Date": "2026-10-12T08:30:00",
      "DiagCode": "550 5.1.1 User unknown",
      "IdList": 101
    }
  ]
}

POST /suppression/bounces/{Id}/del.{format}

Eliminar un rebote

Source y Type son obligatorios, tal como los devuelve /suppression/bounces: un Id por sí solo no es único.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
Idpathinteger (int64)síId del rebote

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
Sourcestringsílist, contact, api o smtp
Typestring: hard, softsíhard o soft

Respuestas

CódigoDescripción
200Rebote eliminado
400Falta Source o Type
401Credenciales no válidas
404Rebote no encontrado

Ejemplo 200

{
  "Result": "OK",
  "Id": 5521,
  "Restored": false
}

POST /suppression/bounces/{Id}/restore.{format}

Volver a poner en sus listas un contacto con rebote duro

Solo para un rebote duro con el origen contact.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
Idpathinteger (int64)síId del rebote

Respuestas

CódigoDescripción
200Contacto repuesto
401Credenciales no válidas
404Rebote duro de un contacto no encontrado o dirección ya no activa

Ejemplo 200

{
  "Result": "OK",
  "Id": 5521,
  "Restored": true
}

GET /suppression/unsubscribers.{format}

Listar las bajas de la cuenta

Los más recientes primero. El total está en la cabecera X-Total-Count.

Scope OAuth : contacts:read

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
sourcequerystringOrigen de la baja: contact, list, smtp, api o api3
emailquerystringDirección exacta
dateFromquerystring (date-time)A partir de esta fecha
dateToquerystring (date-time)Hasta esta fecha
numberOfRecordsqueryinteger
pageNumberqueryinteger

Respuestas

CódigoDescripción
200Bajas devueltas
401Credenciales no válidas

Ejemplo 200

{
  "unsubscribers": [
    {
      "Id": 9012,
      "Source": "api",
      "Email": "[email protected]",
      "Date": "2026-10-20T16:05:00",
      "ListName": null,
      "Comment": "Asked by phone"
    }
  ]
}

POST /suppression/unsubscribers/add.{format}

Añadir una baja

Sin ListId, la dirección se da de baja de toda la cuenta. Con ListId, solo de esa lista de bajas.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
EmailstringsíDirección que dar de baja
CommentstringComentario libre
ListIdinteger (int64)Lista de bajas de la cuenta (opcional)

Respuestas

CódigoDescripción
200Hecho. AlreadyUnsubscribed es true cuando la dirección ya estaba dada de baja.
400Se requiere una dirección válida
401Credenciales no válidas
404ListId no es una lista de bajas de esta cuenta

Ejemplo 200

{
  "Result": "OK",
  "AlreadyUnsubscribed": false
}

POST /suppression/unsubscribers/{Id}/del.{format}

Eliminar una baja

Source es obligatorio, tal como lo devuelve /suppression/unsubscribers: un Id por sí solo no es único.

Scope OAuth : contacts:write

Parámetros

NombreDóndeTipoObligatorioDescripción
formatpathstring: json, xmlsíFormato de respuesta
Idpathinteger (int64)síId de la baja

Cuerpo de la solicitud (application/x-www-form-urlencoded)

NombreTipoObligatorioDescripción
Sourcestringsícontact, list, smtp, api o api3

Respuestas

CódigoDescripción
200Baja eliminada
400Source es obligatorio
401Credenciales no válidas
404Baja no encontrada

Ejemplo 200

{
  "Result": "OK",
  "Removed": 9012
}