> ## 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.

# Keplars

> Envía correos electrónicos transaccionales a través de Keplars basados en eventos de Dodo Payments.

## Introducción

Envía correos electrónicos transaccionales profesionales automáticamente cuando ocurren eventos de pago y suscripción. Entrega confirmaciones de pago, actualizaciones de suscripción y notificaciones de fallos a través de Keplars sin necesidad de un servidor intermedio. Dodo Payments llama a la API de Keplars directamente usando un manejador de transformación JavaScript.

<Info>
  Esta integración requiere tu clave API de Keplars para autenticación. Encuéntrala en el panel de Keplars bajo **Settings → API Keys**, y verifica un dominio o dirección de remitente bajo **Domains**.
</Info>

## Comenzando

<Steps>
  <Step title="Open the Webhook Section">
    En tu panel de Dodo Payments, navega a <b>Webhooks → + Add Endpoint</b> y despliega el menú de integraciones.
  </Step>

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

    <Frame>
      <img src="https://mintcdn.com/dodopayments/tM0KgwbOo2xwg7zr/images/integrations/keplars/select.png?fit=max&auto=format&n=tM0KgwbOo2xwg7zr&q=85&s=776a4a2228efa0822b15b13d2baaf5bb" alt="Selecciona la tarjeta de integración Keplars" style={{ maxHeight: '500px', width: 'auto' }} width="1040" height="731" data-path="images/integrations/keplars/select.png" />
    </Frame>
  </Step>

  <Step title="Enter API Key">
    Proporciona tu clave API de Keplars. Se envía como un token Bearer en cada solicitud.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/tM0KgwbOo2xwg7zr/images/integrations/keplars/api-key.png?fit=max&auto=format&n=tM0KgwbOo2xwg7zr&q=85&s=f3e0917155715d0587a6012c1bfd3f26" alt="Ingresa la URL de la API de Keplars, la clave API y suscríbete a eventos" style={{ maxHeight: '500px', width: 'auto' }} width="982" height="854" data-path="images/integrations/keplars/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    Edita el código de transformación para dar formato a los correos electrónicos para Keplars. Reemplaza la dirección de remitente y los IDs de plantilla provisionales con los tuyos.
  </Step>

  <Step title="Test & Create">
    Prueba con cargas útiles de muestra y haz clic en <b>Crear</b> para activar el envío de correos electrónicos.
  </Step>

  <Step title="Done!">
    🎉 Los eventos de pago ahora activarán automáticamente los correos electrónicos transaccionales a través de Keplars.
  </Step>
</Steps>

## Ejemplos de Código de Transformación

Cada manejador establece `webhook.url` al punto de envío de alta prioridad de Keplars y reescribe `webhook.payload` en una solicitud de Keplars (la clave API se envía automáticamente como un token Bearer). Reemplaza `payments@mail.yourdomain.com` con tu remitente verificado e `your-keplars-*-template-id` con tus IDs de plantilla reales.

<Warning>
  `to` debe ser un **arreglo**, incluso para un solo destinatario. Al usar `template_id`, **no** envíes también `subject` o `body`. La plantilla los proporciona.
</Warning>

### Correo de Confirmación de Pago

```javascript payment_succeeded.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "payment.succeeded") return webhook;

  const data = webhook.payload.data || {};
  const paymentDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-payment-success-template-id",
    params: {
      customer_name: data.customer?.name,
      amount: ((data.total_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      payment_id: data.payment_id,
      payment_method: data.payment_method,
      payment_date: paymentDate,
    },
  };
  return webhook;
}
```

### Notificación de Fallo de Pago

```javascript payment_failed.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "payment.failed") return webhook;

  const data = webhook.payload.data || {};
  const paymentDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-payment-failed-template-id",
    params: {
      customer_name: data.customer?.name,
      amount: ((data.total_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      payment_id: data.payment_id,
      error_message: data.error_message || "Your payment could not be processed.",
      payment_date: paymentDate,
    },
  };
  return webhook;
}
```

### Correo de Bienvenida a Suscripción

```javascript subscription_active.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "subscription.active") return webhook;

  const data = webhook.payload.data || {};
  const nextBilling = data.next_billing_date
    ? new Date(data.next_billing_date).toLocaleDateString("en-US", {
        year: "numeric", month: "long", day: "numeric",
      })
    : "";

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-subscription-active-template-id",
    params: {
      customer_name: data.customer?.name,
      subscription_id: data.subscription_id,
      product_id: data.product_id,
      amount: ((data.recurring_pre_tax_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      billing_interval: data.payment_frequency_interval || "month",
      next_billing_date: nextBilling,
    },
  };
  return webhook;
}
```

### Correo de Cancelación de Suscripción

```javascript subscription_cancelled.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "subscription.cancelled") return webhook;

  const data = webhook.payload.data || {};
  const cancellationDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-subscription-cancelled-template-id",
    params: {
      customer_name: data.customer?.name,
      subscription_id: data.subscription_id,
      cancellation_date: cancellationDate,
    },
  };
  return webhook;
}
```

## Consejos

* Usa un dominio de remitente verificado o una dirección para mejor entregabilidad.
* Crea una plantilla dedicada de Keplars por tipo de evento para que cada correo electrónico se mantenga dentro de la marca y del mensaje.
* Personaliza cada correo electrónico pasando datos del cliente como nombre, monto e ID de pago a través de `params`.
* Prueba primero en modo sandbox. Los envíos en sandbox se capturan en la Bandeja de Prueba de Keplars en lugar de ser entregados.

## Solución de Problemas

<AccordionGroup>
  <Accordion title="Emails not being sent">
    * Verifica que tu clave API sea correcta y esté activa en Keplars bajo **Settings → API Keys**.
    * Verifica que tu dominio o dirección de remitente esté verificado.
    * Dodo Payments muestra la respuesta de error de Keplars sin procesar en el registro de entrega del webhook. Veríficalo para más detalles.
  </Accordion>

  <Accordion title="Template not found">
    * El `template_id` en tu manejador debe coincidir con una plantilla activa en tu cuenta de Keplars. Verifica el ID (y que esté activo) en el panel.
  </Accordion>

  <Accordion title="Wrong event triggered">
    * Cada manejador verifica `webhook.eventType` y regresa temprano si no coincide. Asegúrate de que los eventos correctos estén suscritos en el endpoint del webhook de Dodo Payments.
  </Accordion>
</AccordionGroup>
