> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MailerLite

> Agrega automáticamente clientes a las listas de suscriptores de MailerLite y activa automatizaciones de correo electrónico basadas en eventos de Dodo Payments.

## Introducción

Sincroniza automáticamente a tus clientes que pagan con las listas de suscriptores de MailerLite cuando ocurren eventos de pago. Agrega clientes a grupos específicos, activa flujos de trabajo de automatización y mantén tus listas de marketing por correo electrónico actualizadas con datos de pago reales.

MailerLite es una poderosa plataforma de marketing por correo electrónico para boletines, campañas y automatizaciones. Esta integración te ayuda a gestionar automáticamente a los suscriptores en función de la actividad de pago, perfecta para secuencias de incorporación, segmentación de clientes y campañas de marketing dirigidas.

<Info>
  Esta integración requiere tu clave API de MailerLite para la autenticación. Puedes generar una desde tu [página de Integraciones de MailerLite](https://dashboard.mailerlite.com/integrations/api).
</Info>

## Comenzando

<Steps>
  <Step title="Open the Webhook Section">
    En el panel de control de Dodo Payments, navega a <b>Webhooks + Añadir Endpoint</b> y expande el menú desplegable de integraciones.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/j9AWnq3yJLUq3cjh/images/integrations/mailerlite.png?fit=max&auto=format&n=j9AWnq3yJLUq3cjh&q=85&s=4f247c342f82ffe529b79970fcf1a4e3" alt="Añadir Endpoint y menú desplegable de integraciones" style={{ maxHeight: '500px', width: 'auto' }} width="876" height="769" data-path="images/integrations/mailerlite.png" />
    </Frame>
  </Step>

  <Step title="Select MailerLite">
    Selecciona la tarjeta de integración <b>MailerLite</b>.
  </Step>

  <Step title="Enter API Key">
    Proporciona tu clave API de MailerLite en la configuración.
  </Step>

  <Step title="Configure Transformation">
    Edita el código de transformación para formatear los datos del suscriptor según la API de MailerLite.
  </Step>

  <Step title="Test & Create">
    Prueba con cargas útiles de ejemplo y haz clic en <b>Create</b> para activar la sincronización de suscriptores.
  </Step>

  <Step title="Done!">
    Los eventos de pago ahora sincronizarán automáticamente a los clientes con tus listas de MailerLite.
  </Step>
</Steps>

## Ejemplos de código de transformación

### Agregar cliente en pago exitoso

```javascript add_customer.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        company: p.customer.business_name || "",
        last_name: ""
      },
      groups: ["your-group-id-here"],
      status: "active"
    };
  }
  return webhook;
}
```

### Agregar suscriptor a múltiples grupos según el producto

```javascript product_segmentation.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    
    // Determine groups based on product or amount
    const groups = ["customers-group-id"];
    
    // Add to premium group if high-value purchase
    if (p.total_amount >= 10000) { // $100+
      groups.push("premium-customers-group-id");
    }
    
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        last_purchase_amount: (p.total_amount / 100).toFixed(2),
        last_purchase_date: new Date(webhook.payload.timestamp).toISOString().split('T')[0],
        payment_id: p.payment_id
      },
      groups: groups,
      status: "active"
    };
  }
  return webhook;
}
```

### Agregar nuevo suscriptor al activar la suscripción

```javascript subscription_subscriber.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "subscription.active") {
    const s = webhook.payload.data;
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: s.customer.email,
      fields: {
        name: s.customer.name,
        subscription_plan: s.product_id,
        subscription_amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
        billing_frequency: s.payment_frequency_interval,
        subscription_start: new Date().toISOString().split('T')[0]
      },
      groups: ["subscribers-group-id", "active-subscriptions-group-id"],
      status: "active"
    };
  }
  return webhook;
}
```

### Actualizar suscriptor al cancelar la suscripción

```javascript subscription_cancelled.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "subscription.cancelled") {
    const s = webhook.payload.data;
    // Use PUT to update existing subscriber
    webhook.url = "https://connect.mailerlite.com/api/subscribers/" + encodeURIComponent(s.customer.email);
    webhook.method = "PUT";
    webhook.payload = {
      fields: {
        subscription_status: "cancelled",
        cancellation_date: new Date().toISOString().split('T')[0]
      },
      groups: ["churned-customers-group-id"]
    };
  }
  return webhook;
}
```

### Agregar cliente con campos personalizados

```javascript custom_fields.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        company: p.customer.business_name || "",
        country: p.customer.country || "",
        city: p.customer.city || "",
        phone: p.customer.phone || "",
        // Custom fields (must be created in MailerLite first)
        total_spent: (p.total_amount / 100).toFixed(2),
        customer_since: new Date().toISOString().split('T')[0],
        payment_method: p.payment_method || "unknown",
        currency: p.currency || "USD"
      },
      groups: ["paying-customers-group-id"],
      status: "active",
      subscribed_at: new Date().toISOString().replace('T', ' ').split('.')[0]
    };
  }
  return webhook;
}
```

### Activar automatización a través de evento

```javascript trigger_automation.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    
    // First, ensure subscriber exists
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        // Add a trigger field that your automation watches
        last_payment_trigger: new Date().toISOString(),
        last_payment_amount: (p.total_amount / 100).toFixed(2)
      },
      status: "active"
    };
    
    // Tip: Create an automation in MailerLite that triggers
    // when 'last_payment_trigger' field is updated
  }
  return webhook;
}
```

## Consejos

* Crea campos personalizados en MailerLite antes de usarlos en tus transformaciones
* Usa grupos para segmentar clientes por producto, nivel de plan o comportamiento de compra
* Configura flujos de trabajo de automatización en MailerLite que se activen con actualizaciones de campos
* Usa el comportamiento de upsert (POST a /subscribers) para evitar errores de suscriptor duplicado
* Almacena metadatos de pago en campos personalizados para obtener mejores insights sobre los clientes
* Prueba con un grupo pequeño antes de habilitar para todos los pagos

## Configuración de campos personalizados

Antes de usar campos personalizados, necesitas crearlos en MailerLite:

1. Ve a tu panel de MailerLite
2. Dirígete a **Subscribers Fields**
3. Haz clic en **Create field** y agrega campos como:
   * `total_spent` (Número)
   * `customer_since` (Fecha)
   * `subscription_plan` (Texto)
   * `payment_method` (Texto)
   * `last_payment_amount` (Número)

## Solución de problemas

<AccordionGroup>
  <Accordion title="Subscribers not being added">
    * Verifica que la clave API sea correcta y esté activa
    * Comprueba que la dirección de correo electrónico sea válida (compatible con RFC 2821)
    * Asegúrate de que los ID de grupo sean correctos y existan en tu cuenta
    * Nota: los suscriptores dados de baja, rechazados o marcados como spam no pueden reactivarse mediante la API
  </Accordion>

  <Accordion title="Custom fields not updating">
    * Verifica que los campos personalizados existan en MailerLite antes de usarlos
    * Comprueba que los nombres de campo coincidan exactamente (sensibles a mayúsculas)
    * Asegúrate de que los valores de campo coincidan con el tipo esperado (texto, número, fecha)
  </Accordion>

  <Accordion title="Rate limit errors">
    * La API de MailerLite tiene un límite de 120 solicitudes por minuto
    * Usa los endpoints por lotes si procesas muchos suscriptores
    * Implementa estrategias de retroceso en escenarios de alto volumen
  </Accordion>

  <Accordion title="Group assignment not working">
    * Verifica que los ID de grupo sean cadenas numéricas
    * Comprueba que los grupos existan en tu cuenta de MailerLite
    * Nota: usar PUT con grupos eliminará al suscriptor de los grupos no listados
  </Accordion>
</AccordionGroup>

## Referencia de API

La API de Suscriptores de MailerLite acepta los siguientes parámetros clave:

| Parámetro          | Tipo   | Obligatorio | Descripción                                              |
| ------------------ | ------ | ----------- | -------------------------------------------------------- |
| `email`            | string | Sí          | Dirección de correo electrónico válida (RFC 2821)        |
| `fields`           | object | No          | Objeto con pares nombre/valor de campo                   |
| `fields.name`      | string | No          | Nombre del suscriptor                                    |
| `fields.last_name` | string | No          | Apellido del suscriptor                                  |
| `fields.company`   | string | No          | Nombre de la empresa                                     |
| `fields.country`   | string | No          | País                                                     |
| `fields.city`      | string | No          | Ciudad                                                   |
| `fields.phone`     | string | No          | Número de teléfono                                       |
| `groups`           | array  | No          | Matriz de ID de grupos a los que agregar el suscriptor   |
| `status`           | string | No          | Uno de: active, unsubscribed, unconfirmed, bounced, junk |
| `subscribed_at`    | string | No          | Fecha con formato `yyyy-MM-dd HH:mm:ss`                  |
| `ip_address`       | string | No          | Dirección IP del suscriptor                              |

Para la documentación completa de la API, visita [Desarrolladores de MailerLite](https://developers.mailerlite.com/docs/subscribers.html).
