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

# DataFast

> Atribuye ingresos a los canales de marketing con la analítica de DataFast. Rastrea qué fuentes de tráfico generan clientes de pago y optimiza tu crecimiento.

## Introducción

DataFast es una herramienta de análisis centrada en los ingresos que te ayuda a descubrir qué canales de marketing generan clientes de pago. Al integrar Dodo Payments con DataFast, puedes atribuir ingresos a tus fuentes de tráfico, identificar segmentos de clientes de alto valor y tomar decisiones basadas en datos para hacer crecer tu negocio.

<Info>
  Esta integración requiere su clave API de DataFast, que puede obtener en su [panel de DataFast](https://datafa.st/).
</Info>

## Cómo Funciona

DataFast rastrea a los visitantes a través de un ID de visitante único almacenado en una cookie. Para atribuir ingresos a los canales de marketing, necesitas:

1. **Capture el ID de visitante de DataFast** de la cookie `datafast_visitor_id` al crear sesiones de pago
2. **Almacene el ID de visitante** en los metadatos de pago
3. **Envíe los datos de pago a DataFast** cuando los pagos se completen con éxito utilizando su API de pagos

Esto permite que DataFast asocie los pagos exitosos con la fuente de tráfico original, dándote una atribución de ingresos completa.

## Comenzando

<Steps>
  <Step title="Install DataFast Script">
    Primero, instale el script de seguimiento de DataFast en su sitio web. Esto crea la cookie `datafast_visitor_id` que rastrea a sus visitantes.

    Visite la [documentación de DataFast](https://datafa.st/docs) para obtener instrucciones de instalación específicas para su plataforma.
  </Step>

  <Step title="Get Your API Key">
    Inicie sesión en su [panel de DataFast](https://datafa.st/) y vaya a la configuración de su sitio web para obtener su clave API.

    <Warning>
      Mantenga su clave API segura y nunca la exponga en código del lado del cliente.
    </Warning>
  </Step>

  <Step title="Capture Visitor ID in Checkout">
    Al crear una sesión de pago, capture el ID de visitante de DataFast de la cookie y agrégelo a los metadatos de su pago.
  </Step>

  <Step title="Send Payment Data via Webhook">
    Configure un webhook para enviar los datos de pago a la API de Pagos de DataFast cuando los pagos tengan éxito.
  </Step>

  <Step title="Done!">
    🎉 Los datos de ingresos ahora aparecerán en su panel de DataFast con atribución completa a los canales de marketing.
  </Step>
</Steps>

## Guía de Implementación

### Paso 1: Agregar ID de Visitante a los Metadatos del Pago

Al crear una sesión de pago, captura el ID de visitante de DataFast de la cookie e inclúyelo en tus metadatos de pago.

<CodeGroup>
  ```typescript Next.js theme={null}
  import { cookies } from 'next/headers';
  import { dodopayments } from '@/lib/dodopayments';

  export async function createCheckout(productId: string) {
    // Capture DataFast visitor ID from cookie
    const datafastVisitorId = cookies().get('datafast_visitor_id')?.value;

    const payment = await dodopayments.payments.create({
      product_cart: [{ product_id: productId, quantity: 1 }],
      // ... other payment configuration
      metadata: {
        datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
      },
    });

    return payment;
  }
  ```

  ```javascript Express.js theme={null}
  const express = require('express');
  const router = express.Router();

  router.post('/create-checkout', async (req, res) => {
    // Capture DataFast visitor ID from cookie
    const datafastVisitorId = req.cookies?.datafast_visitor_id;

    const payment = await dodopayments.payments.create({
      product_cart: [{ product_id: req.body.productId, quantity: 1 }],
      // ... other payment configuration
      metadata: {
        datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
      },
    });

    res.json({ payment });
  });
  ```

  ```javascript Other Frameworks theme={null}
  // Capture DataFast visitor ID from cookie
  const datafastVisitorId = getCookie('datafast_visitor_id'); // Use your framework's cookie method

  const payment = await dodopayments.payments.create({
    product_cart: [{ product_id: productId, quantity: 1 }],
    // ... other payment configuration
    metadata: {
      datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
    },
  });
  ```
</CodeGroup>

### Paso 2: Enviar Datos de Pago a DataFast

Configura un endpoint de webhook para enviar datos de pago a la API de Pagos de DataFast cuando los pagos sean exitosos.

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

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/add.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=3aec6c9e450d0616573a4a7dfe89f78e" alt="Agregar Endpoint y menú de integraciones" style={{ maxHeight: '500px', width: 'auto' }} width="1720" height="1192" data-path="images/integrations/datafast/add.png" />
    </Frame>
  </Step>

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

  <Step title="Enter API Key">
    Proporciona tu clave API de DataFast en el campo de configuración.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/api-key.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=25129c8ca64e38ef44a6960c2f3a2993" alt="Agregar Clave API" style={{ maxHeight: '500px', width: 'auto' }} width="1740" height="882" data-path="images/integrations/datafast/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    Edite el código de transformación para formatear los datos de pago para la API de Pagos de DataFast.
  </Step>

  <Step title="Test & Create">
    Pruebe con cargas útiles de ejemplo y haga clic en <b>Crear</b> para activar la integración.
  </Step>
</Steps>

## Ejemplos de Código de Transformación

### Atribución Básica de Pagos

```javascript basic_payment.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    // Only send to DataFast if visitor ID exists in metadata
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      webhook.payload = {
        amount: payment.total_amount / 100, // Convert from cents to dollars
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

### Manejar Monedas sin Decimales

Algunas monedas (como JPY) no utilizan decimales. Ajusta el cálculo del monto en consecuencia:

```javascript zero_decimal.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      // Zero decimal currencies: JPY, KRW, CLP, etc.
      const zeroDecimalCurrencies = ['JPY', 'KRW', 'CLP', 'VND', 'UGX', 'MGA'];
      const isZeroDecimal = zeroDecimalCurrencies.includes(payment.currency);
      
      webhook.payload = {
        amount: isZeroDecimal 
          ? payment.total_amount // Use amount as-is for zero decimal currencies
          : payment.total_amount / 100, // Convert from cents for other currencies
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

### Pagos de Suscripción

Para pagos de suscripción recurrentes, puedes rastrear cada pago:

```javascript subscription_payment.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    // Check if this is a subscription payment
    const isSubscription = payment.subscription_id !== null;
    
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      webhook.payload = {
        amount: payment.total_amount / 100,
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
        // Optional: Add subscription context
        ...(isSubscription && {
          subscription_id: payment.subscription_id,
        }),
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

## Mejores Prácticas

<Tip>
  **Capture el ID de visitante lo antes posible**: almacene el ID de visitante de DataFast tan pronto como sea posible en su flujo de pago para asegurar una atribución precisa, incluso si el usuario se va y regresa después.
</Tip>

* **Siempre incluye el ID de visitante en los metadatos**: Sin el ID de visitante, DataFast no puede atribuir ingresos a los canales de marketing
* **Maneja monedas sin decimales**: Algunas monedas (JPY, KRW, etc.) no utilizan decimales; ajusta tu cálculo de monto en consecuencia
* **Prueba con pagos de muestra**: Verifica que la integración funcione correctamente antes de activarla
* **Monitorea tu tablero de DataFast**: Verifica que los pagos aparezcan correctamente con la atribución adecuada
* **Usa reintentos de webhook**: La API de Pagos de DataFast es idempotente, por lo que los reintentos son seguros si un webhook falla

## Solución de Problemas

<AccordionGroup>
  <Accordion title="Payments not appearing in DataFast">
    * Verifique que su clave API de DataFast sea correcta y esté activa
    * Compruebe que la cookie `datafast_visitor_id` se esté capturando y almacenando en los metadatos de pago
    * Asegúrese de que la transformación del webhook esté formateando correctamente la carga útil
    * Verifique que el webhook se active en eventos `payment.succeeded`
    * Revise el panel de DataFast en busca de mensajes de error o registros de API
  </Accordion>

  <Accordion title="Revenue attribution not working">
    * Confirme que el script de seguimiento de DataFast esté instalado y funcionando en su sitio web
    * Verifique que la cookie `datafast_visitor_id` se esté estableciendo correctamente
    * Compruebe que los IDs de visitante coincidan entre la creación del pago y la finalización del mismo
    * Asegúrese de capturar el ID de visitante antes de crear la sesión de pago
    * Revise la [documentación de la API de Pagos](https://datafa.st/docs/payments-api) de DataFast para obtener orientación adicional
  </Accordion>

  <Accordion title="Transformation errors">
    * Valide que la estructura JSON coincida con el formato de la API de Pagos de DataFast
    * Verifique que todos los campos obligatorios (`amount`, `currency`, `transaction_id`, `datafast_visitor_id`) estén presentes
    * Asegúrese de que el monto se convierta correctamente (divídalo entre 100 para la mayoría de las monedas, excepto las de cero decimales)
    * Confirme que la URL del endpoint de la API sea correcta: `https://datafa.st/api/v1/payments`
    * Pruebe la transformación con cargas útiles de webhook de ejemplo
  </Accordion>

  <Accordion title="Currency conversion issues">
    * Para las monedas de cero decimales (JPY, KRW, CLP, VND, UGX, MGA), envíe el monto tal cual sin dividirlo entre 100
    * Para todas las demás monedas, divida el monto entre 100 para convertirlo de centavos a la unidad base
    * Verifique dos veces que el código de moneda coincida con el formato ISO 4217 (por ejemplo, "USD", "EUR", "JPY")
  </Accordion>
</AccordionGroup>

## Recursos Adicionales

<CardGroup cols={2}>
  <Card title="DataFast Documentation" icon="book" href="https://datafa.st/docs/payments-api">
    Conozca más sobre la API de Pagos de DataFast y las funciones de atribución de ingresos.
  </Card>

  <Card title="DataFast Dashboard" icon="chart-bar" href="https://datafa.st/">
    Acceda a su panel de DataFast para ver análisis de ingresos y datos de atribución.
  </Card>
</CardGroup>

<Info>
  ¿Necesita ayuda? Contacte al soporte de Dodo Payments en [support@dodopayments.com](mailto:support@dodopayments.com) para obtener asistencia con la integración.
</Info>
