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

> Attributera intäkter till marknadsföringskanaler med DataFast-analys. Spåra vilka trafik källor som driver betalande kunder och optimera din tillväxt.

## Introduktion

DataFast är ett intäktsfokuserat analysverktyg som hjälper dig att upptäcka vilka marknadsföringskanaler som driver betalande kunder. Genom att integrera Dodo Payments med DataFast kan du attributera intäkter till dina trafik källor, identifiera högvärdiga kundsegment och fatta datadrivna beslut för att växa ditt företag.

<Info>
  Den här integrationen kräver din DataFast API-nyckel, som du kan skaffa från din [DataFast-instrumentpanel](https://datafa.st/).
</Info>

## Hur Det Fungerar

DataFast spårar besökare genom ett unikt besökar-ID som lagras i en cookie. För att attributera intäkter till marknadsföringskanaler behöver du:

1. **Fånga DataFast:s besökar-ID** från `datafast_visitor_id`-kakan när du skapar checkout-sessioner
2. **Lagra besökar-ID:t** i din betalningsmetadata
3. **Skicka betalningsdata till DataFast** när betalningar lyckas via deras Payment API

Detta gör att DataFast kan matcha lyckade betalningar med den ursprungliga trafik källan, vilket ger dig fullständig intäktsattribution.

## Komma Igång

<Steps>
  <Step title="Install DataFast Script">
    Börja med att installera DataFast-spårningsskriptet på din webbplats. Detta skapar `datafast_visitor_id`-kakan som spårar dina besökare.

    Besök [DataFast-dokumentationen](https://datafa.st/docs) för installationsinstruktioner specifika för din plattform.
  </Step>

  <Step title="Get Your API Key">
    Logga in på din [DataFast-instrumentpanel](https://datafa.st/) och gå till webbplatsinställningarna för att hämta din API-nyckel.

    <Warning>
      Håll din API-nyckel säker och exponera den aldrig i klientkod.
    </Warning>
  </Step>

  <Step title="Capture Visitor ID in Checkout">
    När du skapar en checkout-session, fånga DataFast-besökar-ID:t från kakan och lägg till det i din betalningsmetadata.
  </Step>

  <Step title="Send Payment Data via Webhook">
    Konfigurera en webhook för att skicka betalningsdata till DataFast:s Payment API när betalningar lyckas.
  </Step>

  <Step title="Done!">
    🎉 Intäktsdata kommer nu att visas i din DataFast-instrumentpanel med full attribuering till marknadsföringskanaler.
  </Step>
</Steps>

## Implementeringsguide

### Steg 1: Lägg till Besökar-ID i Kassa Metadata

När du skapar en kassa session, fånga DataFast besökar-ID från cookien och inkludera det i din betalningsmetadata.

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

### Steg 2: Skicka Betalningsdata till DataFast

Konfigurera en webhook-endpoint för att skicka betalningsdata till DataFast's Betalnings-API när betalningar lyckas.

<Steps>
  <Step title="Open the Webhook Section">
    På din Dodo Payments-instrumentpanel, navigera till <b>Webhooks → + Lägg till slutpunkt</b> och expandera rullgardinsmenyn för integrationer.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/add.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=3aec6c9e450d0616573a4a7dfe89f78e" alt="Lägg till slutpunkt och dropdown för integrationer" style={{ maxHeight: '500px', width: 'auto' }} width="1720" height="1192" data-path="images/integrations/datafast/add.png" />
    </Frame>
  </Step>

  <Step title="Select DataFast">
    Välj DataFast-integrationskortet.
  </Step>

  <Step title="Enter API Key">
    Ange din DataFast API-nyckel i konfigurationsfältet.

    <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="Lägg till API-nyckel" style={{ maxHeight: '500px', width: 'auto' }} width="1740" height="882" data-path="images/integrations/datafast/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    Redigera transformationskoden för att formatera betalningsdata för DataFast:s Payment API.
  </Step>

  <Step title="Test & Create">
    Testa med exempelpayloader och klicka på <b>Create</b> för att aktivera integrationen.
  </Step>
</Steps>

## Transformationskodsexempel

### Grundläggande Betalningsattribution

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

### Hantera Valutor Utan Decimaler

Vissa valutor (som JPY) använder inte decimaler. Justera beloppsberäkningen därefter:

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

### Prenumerationsbetalningar

För återkommande prenumerationsbetalningar kan du spåra varje betalning:

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

## Bästa Praxis

<Tip>
  **Fånga besökar-ID:t tidigt**: Spara DataFast-besökar-ID:t så snart som möjligt i din checkout-flöde för att säkerställa korrekt attribuering, även om användaren lämnar och återkommer senare.
</Tip>

* **Inkludera alltid besökar-ID i metadata**: Utan besökar-ID kan DataFast inte attributera intäkter till marknadsföringskanaler
* **Hantera valutor utan decimaler**: Vissa valutor (JPY, KRW, etc.) använder inte decimaler—justera din beloppsberäkning därefter
* **Testa med exempelbetalningar**: Verifiera att integrationen fungerar korrekt innan du går live
* **Övervaka din DataFast-instrumentpanel**: Kontrollera att betalningar visas korrekt med rätt attribution
* **Använd webhook-retries**: DataFast's Betalnings-API är idempotent, så retries är säkra om en webhook misslyckas

## Felsökning

<AccordionGroup>
  <Accordion title="Payments not appearing in DataFast">
    * Verifiera att din DataFast API-nyckel är korrekt och aktiv
    * Kontrollera att `datafast_visitor_id` fångas och lagras i betalningsmetadata
    * Se till att webhook-transformationen formaterar nyttolasten korrekt
    * Verifiera att webhooken triggas vid `payment.succeeded`-händelser
    * Kontrollera DataFast-instrumentpanelen efter eventuella felmeddelanden eller API-loggar
  </Accordion>

  <Accordion title="Revenue attribution not working">
    * Bekräfta att DataFast-spårningsskriptet är installerat och fungerar på din webbplats
    * Verifiera att `datafast_visitor_id`-kakan sätts korrekt
    * Kontrollera att besökar-ID:n matchar mellan skapande av checkout och slutförd betalning
    * Se till att du fångar besökar-ID:t innan du skapar checkout-sessionen
    * Granska DataFast:s [Payment API-dokumentation](https://datafa.st/docs/payments-api) för ytterligare vägledning
  </Accordion>

  <Accordion title="Transformation errors">
    * Validera att JSON-strukturen matchar DataFast:s Payment API-format
    * Kontrollera att alla obligatoriska fält (`amount`, `currency`, `transaction_id`, `datafast_visitor_id`) finns med
    * Se till att beloppet konverteras korrekt (dividera med 100 för de flesta valutor, förutom valutor utan decimaler)
    * Verifiera att API-slutpunkts-URL:en är korrekt: `https://datafa.st/api/v1/payments`
    * Testa transformationen med exempelpayloader för webhooken
  </Accordion>

  <Accordion title="Currency conversion issues">
    * För valutor utan decimaler (JPY, KRW, CLP, VND, UGX, MGA) skicka beloppet som det är utan att dividera med 100
    * För alla andra valutor, dividera beloppet med 100 för att konvertera från cent till basenhet
    * Dubbelkolla att valutakoden matchar ISO 4217-formatet (t.ex. "USD", "EUR", "JPY")
  </Accordion>
</AccordionGroup>

## Ytterligare Resurser

<CardGroup cols={2}>
  <Card title="DataFast Documentation" icon="book" href="https://datafa.st/docs/payments-api">
    Läs mer om DataFast:s Payment API och funktionerna för intäktsattribuering.
  </Card>

  <Card title="DataFast Dashboard" icon="chart-bar" href="https://datafa.st/">
    Gå till din DataFast-instrumentpanel för att se intäktsanalys och attribueringsdata.
  </Card>
</CardGroup>

<Info>
  Behöver du hjälp? Kontakta Dodo Payments support på [support@dodopayments.com](mailto:support@dodopayments.com) för assistans med integrationen.
</Info>
