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

> Ordnen Sie Einnahmen Marketingkanälen mit DataFast-Analysen zu. Verfolgen Sie, welche Traffic-Quellen zahlende Kunden anziehen und optimieren Sie Ihr Wachstum.

## Einführung

DataFast ist ein umsatzorientiertes Analysetool, das Ihnen hilft, herauszufinden, welche Marketingkanäle zahlende Kunden anziehen. Durch die Integration von Dodo Payments mit DataFast können Sie Einnahmen Ihren Traffic-Quellen zuordnen, wertvolle Kundensegmente identifizieren und datengestützte Entscheidungen zur Geschäftswachstum treffen.

<Info>
  Für diese Integration wird Ihr DataFast API-Schlüssel benötigt, den Sie in Ihrem [DataFast-Dashboard](https://datafa.st/) erhalten können.
</Info>

## So funktioniert es

DataFast verfolgt Besucher über eine eindeutige Besucher-ID, die in einem Cookie gespeichert ist. Um Einnahmen Marketingkanälen zuzuordnen, müssen Sie:

1. **Erfassen Sie die DataFast-Besucher-ID** aus dem `datafast_visitor_id`-Cookie beim Erstellen von Checkout-Sitzungen
2. **Speichern Sie die Besucher-ID** in Ihren Zahlungs-Metadaten
3. **Senden Sie Zahlungsdaten an DataFast**, wenn Zahlungen erfolgreich sind, über deren Payment API

Dies ermöglicht es DataFast, erfolgreiche Zahlungen mit der ursprünglichen Traffic-Quelle abzugleichen, sodass Sie eine vollständige Einnahmenzuordnung erhalten.

## Erste Schritte

<Steps>
  <Step title="Install DataFast Script">
    Installieren Sie zunächst das DataFast-Tracking-Skript auf Ihrer Website. Dadurch wird das `datafast_visitor_id`-Cookie erstellt, das Ihre Besucher verfolgt.

    Rufen Sie die [DataFast-Dokumentation](https://datafa.st/docs) auf, um plattformspezifische Installationsanweisungen zu erhalten.
  </Step>

  <Step title="Get Your API Key">
    Melden Sie sich bei Ihrem [DataFast-Dashboard](https://datafa.st/) an und rufen Sie Ihre Website-Einstellungen auf, um Ihren API-Schlüssel zu erhalten.

    <Warning>
      Halten Sie Ihren API-Schlüssel sicher und geben Sie ihn niemals im Client-Code preis.
    </Warning>
  </Step>

  <Step title="Capture Visitor ID in Checkout">
    Erfassen Sie beim Erstellen einer Checkout-Sitzung die DataFast-Besucher-ID aus dem Cookie und fügen Sie sie Ihren Zahlungs-Metadaten hinzu.
  </Step>

  <Step title="Send Payment Data via Webhook">
    Konfigurieren Sie einen Webhook, um Zahlungsdaten an die Payment API von DataFast zu senden, wenn Zahlungen erfolgreich sind.
  </Step>

  <Step title="Done!">
    🎉 Umsatzdaten erscheinen nun in Ihrem DataFast-Dashboard mit vollständiger Zuordnung zu Marketingkanälen.
  </Step>
</Steps>

## Implementierungsanleitung

### Schritt 1: Besucher-ID zu Checkout-Metadaten hinzufügen

Beim Erstellen einer Checkout-Sitzung erfassen Sie die DataFast-Besucher-ID aus dem Cookie und fügen Sie sie Ihren Zahlungsmetadaten hinzu.

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

### Schritt 2: Zahlungsdaten an DataFast senden

Konfigurieren Sie einen Webhook-Endpunkt, um Zahlungsdaten an die Payment API von DataFast zu senden, wenn Zahlungen erfolgreich sind.

<Steps>
  <Step title="Open the Webhook Section">
    Navigieren Sie in Ihrem Dodo Payments-Dashboard zu <b>Webhooks → + Endpunkt hinzufügen</b> und erweitern Sie das Dropdown-Menü für Integrationen.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/add.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=3aec6c9e450d0616573a4a7dfe89f78e" alt="Endpunkt hinzufügen und Integrationen-Dropdown" style={{ maxHeight: '500px', width: 'auto' }} width="1720" height="1192" data-path="images/integrations/datafast/add.png" />
    </Frame>
  </Step>

  <Step title="Select DataFast">
    Wählen Sie die <b>DataFast</b>-Integrationskarte aus.
  </Step>

  <Step title="Enter API Key">
    Geben Sie Ihren DataFast API-Schlüssel im Konfigurationsfeld ein.

    <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="API-Schlüssel hinzufügen" style={{ maxHeight: '500px', width: 'auto' }} width="1740" height="882" data-path="images/integrations/datafast/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    Bearbeiten Sie den Transformationscode, um Zahlungsdaten für die Payment API von DataFast zu formatieren.
  </Step>

  <Step title="Test & Create">
    Testen Sie mit Beispiel-Payloads und klicken Sie auf <b>Create</b>, um die Integration zu aktivieren.
  </Step>
</Steps>

## Transformationscode-Beispiele

### Grundlegende Zahlungszuordnung

```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;
}
```

### Umgang mit Währungen ohne Dezimalstellen

Einige Währungen (wie JPY) verwenden keine Dezimalstellen. Passen Sie die Betragsberechnung entsprechend an:

```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;
}
```

### Abonnementzahlungen

Für wiederkehrende Abonnementzahlungen können Sie jede Zahlung verfolgen:

```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;
}
```

## Best Practices

<Tip>
  **Erfassen Sie die Besucher-ID frühzeitig**: Speichern Sie die DataFast-Besucher-ID so früh wie möglich im Checkout-Prozess, um eine genaue Attribution zu gewährleisten, selbst wenn der Benutzer die Seite verlässt und später zurückkehrt.
</Tip>

* **Immer die Besucher-ID in den Metadaten einfügen**: Ohne die Besucher-ID kann DataFast keine Einnahmen Marketingkanälen zuordnen
* **Umgang mit Währungen ohne Dezimalstellen**: Einige Währungen (JPY, KRW usw.) verwenden keine Dezimalstellen – passen Sie Ihre Betragsberechnung entsprechend an
* **Testen Sie mit Beispielzahlungen**: Überprüfen Sie, ob die Integration korrekt funktioniert, bevor Sie live gehen
* **Überwachen Sie Ihr DataFast-Dashboard**: Überprüfen Sie, ob Zahlungen korrekt mit der richtigen Zuordnung angezeigt werden
* **Verwenden Sie Webhook-Wiederholungen**: Die Payment API von DataFast ist idempotent, daher sind Wiederholungen sicher, wenn ein Webhook fehlschlägt

## Fehlersuche

<AccordionGroup>
  <Accordion title="Payments not appearing in DataFast">
    * Überprüfen Sie, ob Ihr DataFast API-Schlüssel korrekt und aktiv ist
    * Stellen Sie sicher, dass das `datafast_visitor_id` erfasst und in den Zahlungs-Metadaten gespeichert wird
    * Vergewissern Sie sich, dass die Webhook-Transformation die Nutzlast korrekt formatiert
    * Prüfen Sie, ob der Webhook bei `payment.succeeded`-Ereignissen ausgelöst wird
    * Kontrollieren Sie das DataFast-Dashboard auf Fehlermeldungen oder API-Protokolle
  </Accordion>

  <Accordion title="Revenue attribution not working">
    * Bestätigen Sie, dass das DataFast-Tracking-Skript auf Ihrer Website installiert und funktionsfähig ist
    * Überprüfen Sie, dass das `datafast_visitor_id`-Cookie korrekt gesetzt wird
    * Stellen Sie sicher, dass die Besucher-IDs zwischen der Erstellung des Checkouts und dem Abschluss der Zahlung übereinstimmen
    * Erfassen Sie die Besucher-ID, bevor Sie die Checkout-Sitzung erstellen
    * Lesen Sie die DataFast [Payment API-Dokumentation](https://datafa.st/docs/payments-api) für weitere Hinweise
  </Accordion>

  <Accordion title="Transformation errors">
    * Validieren Sie, dass die JSON-Struktur dem Format der Payment API von DataFast entspricht
    * Prüfen Sie, dass alle erforderlichen Felder (`amount`, `currency`, `transaction_id`, `datafast_visitor_id`) vorhanden sind
    * Stellen Sie sicher, dass der Betrag korrekt umgerechnet wird (für die meisten Währungen durch 100 teilen, außer bei Währungen ohne Dezimalstellen)
    * Überprüfen Sie, dass die API-Endpunkt-URL korrekt ist: `https://datafa.st/api/v1/payments`
    * Testen Sie die Transformation mit Beispiel-Webhook-Payloads
  </Accordion>

  <Accordion title="Currency conversion issues">
    * Für Währungen ohne Dezimalstellen (JPY, KRW, CLP, VND, UGX, MGA) senden Sie den Betrag unverändert, ohne durch 100 zu teilen
    * Für alle anderen Währungen teilen Sie den Betrag durch 100, um von Cent zur Basiseinheit zu konvertieren
    * Prüfen Sie doppelt, dass der Währungscode dem ISO-4217-Format entspricht (z. B. "USD", "EUR", "JPY")
  </Accordion>
</AccordionGroup>

## Zusätzliche Ressourcen

<CardGroup cols={2}>
  <Card title="DataFast Documentation" icon="book" href="https://datafa.st/docs/payments-api">
    Erfahren Sie mehr über die Payment API von DataFast und die Funktionen zur Umsatzattribution.
  </Card>

  <Card title="DataFast Dashboard" icon="chart-bar" href="https://datafa.st/">
    Greifen Sie auf Ihr DataFast-Dashboard zu, um Umsatzanalysen und Attributionsdaten anzuzeigen.
  </Card>
</CardGroup>

<Info>
  Benötigen Sie Hilfe? Kontaktieren Sie den Dodo Payments Support unter [support@dodopayments.com](mailto:support@dodopayments.com) für Unterstützung bei der Integration.
</Info>
