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

# Kassafunktioner

> Konverteringsoptimerad, globalt kompatibel kassa med stöd för flera valutor, flera språk, automatisk skatteberäkning, rabattkoder, tillägg och smart insamling av adresser.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/cover.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=2dc0a0db8e021e39fb17e84fc12eb5f9" alt="Checkout page" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1556" data-path="images/checkout/cover.png" />
</Frame>

<Info>
  Dodo Payments checkout är en konverteringsoptimerad, globalt kompatibel kassasida utformad för digitala produkter och SaaS-företag. Den stödjer flera valutor, språk, skatter, rabatter, tillägg och affärsanpassade efterlevnadsrutiner.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Skapa värdtjänstkassasessioner programmässigt.
  </Card>

  <Card title="Preview Checkout" icon="eye" href="/api-reference/checkout-sessions/preview">
    Beräkna priser och skatter innan du skapar en session.
  </Card>

  <Card title="Payment Methods" icon="credit-card" href="/features/payment-methods">
    Stödda betalningsmetoder och konfigurationsalternativ.
  </Card>
</CardGroup>

## Adaptiv Valuta

Adaptiv Valuta gör det möjligt för kunder att betala i sin föredragna lokala valuta, vilket förbättrar förtroendet och konverteringsgraden.

### Hur Det Fungerar

1. **Aktivera**: Aktivera adaptiv valuta från **Inställningar → Företag**
2. **Välj**: Kunder kan byta valuta direkt vid kassan
3. **Konvertera**: Priser konverteras dynamiskt med realtids FX-kurser
4. **Visa**: Slutgiltigt belopp visas tydligt före betalning

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c1.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=c2f9ee4b1748448d4ab7ab23954dcc64" alt="Currency selector on checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c1.png" />
</Frame>

<Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
  Läs mer om stödda valutor, växlingsavgifter och hantering av återbetalningar.
</Card>

## Flerspråkig Kassa

Dodo Payments stöder flera språk på kassasidan, vilket gör det möjligt för kunder att slutföra betalningar på ett språk de är bekväma med.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c2.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=ecc6eb8db604e37433d8797c51768577" alt="Language selector on checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c2.png" />
</Frame>

### Nyckelhöjdpunkter

* Språk väljare tillgänglig direkt vid kassan
* UI-text, etiketter och systemmeddelanden är lokaliserade
* Förbättrar tillgänglighet och internationell konvertering

### Stödda Språk

Kassan stöder 21 språk:

| Language   | Code |
| ---------- | ---- |
| Arabic     | `ar` |
| Catalan    | `ca` |
| Chinese    | `zh` |
| Dutch      | `nl` |
| English    | `en` |
| French     | `fr` |
| German     | `de` |
| Hebrew     | `he` |
| Indonesian | `id` |
| Italian    | `it` |
| Japanese   | `ja` |
| Korean     | `ko` |
| Malay      | `ms` |
| Polish     | `pl` |
| Portuguese | `pt` |
| Romanian   | `ro` |
| Russian    | `ru` |
| Spanish    | `es` |
| Swedish    | `sv` |
| Thai       | `th` |
| Turkish    | `tr` |

<Tip>
  Du kan tvinga ett specifikt språk i kassan genom att ange `force_language`-parametern när du skapar en kassasession. Se [Checkout Sessions API](/developer-resources/checkout-session#14-forcing-a-language) för detaljer.
</Tip>

## Automatisk skatteberäkning

Skatter beräknas automatiskt baserat på kundens faktureringsadress, vilket säkerställer efterlevnad av moms, GST och försäljningsskatter utan manuell konfigurering.

### Hur skatteberäkning fungerar

<Steps>
  <Step title="Location Detection">
    Skatteregler tillämpas baserat på kundens land (och region där det är tillämpligt).
  </Step>

  <Step title="Dynamic Updates">
    Skattebelopp uppdateras automatiskt när:

    * Land ändras
    * Adress uppdateras
  </Step>

  <Step title="Transparent Display">
    Den slutliga skatteredovisningen visas tydligt innan betalning.
  </Step>
</Steps>

<Tip>
  Skatteberäkningen är helt automatiserad. Ingen manuell konfiguration krävs för standard digitala varor och SaaS-produkter.
</Tip>

## Stöd för företagsmomssnummer

För registrerade företag tillåter kassan kunder att ange sitt företagsmomssnummer (t.ex. VAT/GST-nummer).

### Vad händer när ett momsnummer anges

* Skattebehörighet valideras i realtid
* Tillämpliga skattebefrielser eller omvänd betalningsskyldighet tillämpas
* Skattebelopp uppdateras omedelbart i kassan

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c3.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=76451fed5636a6ef3e5c3ec7f6a96c9f" alt="Business Tax ID entry on checkout" style={{ maxHeight: '500px', width: '70%' }} width="1440" height="1716" data-path="images/checkout/c3.png" />
</Frame>

<Info>
  Detta är särskilt användbart för B2B SaaS och digitala tjänster där företagskunder kan vara berättigade till skattebefrielser.
</Info>

## Rabattkoder

Kunder kan använda rabatt- eller kampanjkoder som du skapat i instrumentpanelen direkt på kassasidan.

### Kassaupplevelse

1. Kunden anger rabattkoden
2. Rabatten valideras omedelbart
3. Uppdaterat pris och besparing visas tydligt

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c4.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=639dcc94ddd1b41fdd6ff200c2a28e47" alt="Discount code entry on checkout" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c4.png" />
</Frame>

### API-integrering

Förhandsapplicera en eller flera staplade rabattkoder eller aktivera rabattinmatningsfältet:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['WELCOME20'], // Pre-apply one or more codes (max 20, applied in order)
  feature_flags: {
    allow_discount_code: true // Show discount input field
  },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  `discount_codes` accepterar en array med upp till 20 koder som staplas i ordning. Det enda `discount_code`-fältet är föråldrat men fungerar fortfarande — befintliga integrationer behöver inte ändras omedelbart. Migrera till `discount_codes` när det är lämpligt för att använda stapling och den rikare svarformen.
</Info>

<Card title="Discount Codes" icon="percent" href="/features/discount-codes">
  Lär dig hur du skapar och hanterar rabattkoder.
</Card>

<Card title="Validate Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
  Slå upp och validera rabatter med hjälp av kodnamn.
</Card>

## Smart Address Collection

Kassan stödjer flexibel adressinmatning för snabbare slutförande.

### Tillgängliga Alternativ

| Alternativ                  | Beskrivning                                                                                                     |
| --------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Google Address Autofill** | Snabbval med autofyll                                                                                           |
| **Manual Entry**            | Full kontroll för kompletta adresser                                                                            |
| **Country Selection**       | Styr skatte- och efterlevnadsmekanismer                                                                         |
| **Minimal Address**         | Samla endast in land (och postnummer där det krävs för skatt) — se [Minimalt adressläge](#minimal-address-mode) |

<Tip>
  Adressinsamling balanserar hastighet, noggrannhet och global täckning för att maximera konvertering samtidigt som den säkerställer efterlevnad.
</Tip>

### Minimalt adressläge

För maximal omvandling, aktivera insamling av minimal adress för att minska friktion i kassan. När `minimal_address` är inställd på `true`, samlar kassan endast in:

* **Land** — alltid krävt för skattebestämning
* **Postnummer** — endast i regioner där det är nödvändigt för beräkning av moms eller GST

Alla andra adressfält (gata, stad, stat) hoppas över, vilket avsevärt snabbar upp kassans avslutning.

<Frame>
  <img src="https://mintcdn.com/dodopayments/7dyPZdWH7JucnLrT/images/changelog/minimal-address.png?fit=max&auto=format&n=7dyPZdWH7JucnLrT&q=85&s=cd0e5d6f8c32e052c7ab93a88d841fb8" alt="Minimalt adressläge som visar endast fält för land och postnummer i kassan" style={{ maxHeight: '500px', width: 'auto' }} width="1459" height="817" data-path="images/changelog/minimal-address.png" />
</Frame>

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  minimal_address: true,
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Full adressinsamling är fortfarande standard. Aktivera `minimal_address` för digitala produkter och SaaS-flöden där kompletta faktureringsdetaljer inte krävs.
</Info>

<Card title="Minimal Address Reference" icon="address-card" href="/developer-resources/checkout-session#request-body">
  Se den fullständiga `minimal_address`-parameterreferensen i guiden för Checkout Sessions API.
</Card>

## Insamling av telefonnummer

Styr om telefonnumret ska visas i kassan — och om det är obligatoriskt — genom att använda funktionstogglar för kassasessionen.

| Flagga                          | Standard | Beteende                                                                                     |
| ------------------------------- | -------- | -------------------------------------------------------------------------------------------- |
| `allow_phone_number_collection` | `true`   | Visar telefonnummerfältet i kassaflödet                                                      |
| `require_phone_number`          | `false`  | Gör att telefonnummerfältet är obligatoriskt (formulärvalidering kräver ett icke-tomt värde) |

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  feature_flags: {
    allow_phone_number_collection: true,
    require_phone_number: true
  },
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  `require_phone_number: true` kräver `allow_phone_number_collection: true`. API:et avvisar sessioner där telefoninsamling är inaktiverad medan telefonnummer är obligatoriskt.
</Warning>

<Tip>
  Använd `require_phone_number` för B2B SaaS, reglerade industrier eller något flöde där du behöver en verifierad kontaktkanal för support, bedrägerigranskning eller efterlevnad.
</Tip>

## Anpassade fält

Samla in ytterligare information från kunder under utcheckningen genom att definiera anpassade formulärfält. Detta är användbart för att samla in data som företagsnamn, teamstorlek, referenskälla eller annan affärsspecifik information.

### Tillgängliga fälttyper

| Typ        | Beskrivning                         |
| ---------- | ----------------------------------- |
| `text`     | Enkelradigt textinmatningsfält      |
| `number`   | Numerisk inmatning                  |
| `email`    | E-postadress med validering         |
| `url`      | URL med validering                  |
| `date`     | Datoväljare                         |
| `dropdown` | Välj från fördefinierade alternativ |
| `boolean`  | Ja/Nej-växla                        |

### Exempel

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  custom_fields: [
    {
      key: 'company_name',
      label: 'Company Name',
      field_type: 'text',
      required: true
    },
    {
      key: 'team_size',
      label: 'Team Size',
      field_type: 'dropdown',
      required: true,
      options: ['1-10', '11-50', '51-200', '200+']
    }
  ],
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  Kundens svar inkluderas automatiskt i webhook-payloads (`payment.succeeded`, `subscription.active`) och API-svar via `custom_field_responses`-arrayen. Du kan definiera upp till 5 anpassade fält per kassasession.
</Info>

<Card title="Custom Fields Guide" icon="input-text" href="/developer-resources/checkout-session#15-collecting-custom-fields">
  Läs mer om konfiguration av anpassade fält och åtkomst till svar.
</Card>

## Sekretesspolicy och godkännande av villkor

För att säkerställa juridisk och efterlevnadstransparens:

* [Sekretesspolicy](https://dodopayments.com/privacy-policy) och [Köparvillkor](https://dodopayments.com/buyer-terms) länkar visas tydligt i kassan
* Kunder godkänner uttryckligen dessa innan betalning slutförs

<Info>
  Detta hjälper till att uppfylla globala konsumentskydds- och dataskyddskrav inklusive GDPR-efterlevnad.
</Info>

## Insamlingskassa

Produktkollektioner möjliggör en enhetlig kassaupplevelse där kunder kan se och välja bland flera relaterade produkter (t.ex. Starter, Pro, Enterprise-planer) i en enda kassa.

### Hur det fungerar

1. **Alla produkter visas**: Kunder ser alla aktiva produkter i kollektionen
2. **Första produkten förvald**: Den första produkten i kollektionen är automatiskt vald
3. **Jämför alternativ**: Kunder kan jämföra priser och funktioner innan de väljer
4. **Enkelval**: När en produkt har valts fortsätter kassan med standardbetalningsflödet

### Skapa en insamlingskassa

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  När du använder `product_collection_id`, skicka en tom `product_cart`-array. Rabattkoder kan inte förberedas vid sessionens skapande.
</Warning>

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Lär dig hur du skapar och hanterar produktkollektioner för enhetliga kassaupplevelser.
</Card>

## Konfiguration av kassasession

Styr kassabeteendet med Checkout Sessions API:et:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'Jane Doe'
  },
  billing_currency: 'EUR', // Set specific currency
  discount_codes: ['PROMO10'],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return',
  cancel_url: 'https://yoursite.com/pricing', // Optional: where to redirect on cancel
  metadata: {
    order_ref: 'ORD-12345'
  }
});
```

<Info>
  Efter betalning omdirigeras kunder till din `return_url` med frågeparametrar bifogade automatiskt -- inklusive `payment_id` eller `subscription_id`, `status`, `email`, och `license_key` (om tillämpligt). Se [Checkout Sessions guide](/developer-resources/checkout-session#request-body) för den fullständiga listan.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Komplett API-referens för kassasessioner.
  </Card>

  <Card title="Checkout Integration Guide" icon="book" href="/developer-resources/checkout-session">
    Steg-för-steg guide för att integrera kassaflödet.
  </Card>
</CardGroup>

## Anpassning av kassautseende

Anpassa utseendet på kassasidan för att matcha ditt varumärke genom att använda `customization.theme_config`-parametern när du skapar en kassasession via API:et. Konfigurera färger, typsnitt, hörnradie och knapptext för både ljus och mörkt läge.

<Frame>
  <img src="https://mintcdn.com/dodopayments/rTHkQICkStFgSdh-/images/checkout/theme-example.png?fit=max&auto=format&n=rTHkQICkStFgSdh-&q=85&s=5277b69d67c90fd87e7c5d9c125fee12" alt="Anpassad tema kassa" style={{ maxHeight: '500px', width: 'auto' }} width="2856" height="1490" data-path="images/checkout/theme-example.png" />
</Frame>

<Card title="Design & Theme Customization" icon="palette" href="/features/design">
  Konfigurera teman visuellt från instrumentpanelen med inbyggda teman, typografi, färger och liveförhandsgranskning.
</Card>

<Info>
  Detta avsnitt täcker **server-side API** temakonfiguration med `customization.theme_config`. Om du använder **Checkout SDK** (overlay eller inline checkout), se avsnitten om temaanpassning i [Overlay Checkout](/developer-resources/overlay-checkout#theme-customization) eller [Inline Checkout](/developer-resources/inline-checkout#theme-customization) som använder camelCase-egenskaper (t.ex., `bgPrimary` istället för `bg_primary`).
</Info>

### Temakonfigurationsalternativ

| Egenskap             | Beskrivning                                                                 |
| -------------------- | --------------------------------------------------------------------------- |
| `light`              | Färgkonfiguration för ljusläge                                              |
| `dark`               | Färgkonfiguration för mörkt läge                                            |
| `font_primary_url`   | URL för primärt typsnitt                                                    |
| `font_secondary_url` | URL för sekundärt typsnitt                                                  |
| `font_size`          | Typsnittsstorlek: `xs`, `sm`, `md`, `lg`, `xl`, `2xl`                       |
| `font_weight`        | Typsnittsvikt: `normal`, `medium`, `bold`, `extraBold`                      |
| `radius`             | Hörnradie för UI-element (t.ex. `4px`, `0.5rem`, `8px`)                     |
| `pay_button_text`    | Anpassad text för betalningsknappen (t.ex. "Slutför köp", "Prenumerera nu") |

### Färgkonfiguration (Ljus/Mörkt läge)

Varje läge (`light` och `dark`) stöder följande färgegenskaper:

| Egenskap                 | Beskrivning                 |
| ------------------------ | --------------------------- |
| `bg_primary`             | Bakgrundsprimärfärg         |
| `bg_secondary`           | Bakgrundssekundärfärg       |
| `text_primary`           | Textprimärfärg              |
| `text_secondary`         | Textsekundärfärg            |
| `text_placeholder`       | Text platshållarfärg        |
| `text_error`             | Text felaktighetsfärg       |
| `text_success`           | Text framgångsfärg          |
| `border_primary`         | Kantprimärfärg              |
| `border_secondary`       | Kantsekundärfärg            |
| `button_primary`         | Primärknapp bakgrundsfärg   |
| `button_primary_hover`   | Primärknapp hover färg      |
| `button_secondary`       | Sekundärknapp bakgrundsfärg |
| `button_secondary_hover` | Sekundärknapp hover färg    |
| `button_text_primary`    | Primärknapp textfärg        |
| `button_text_secondary`  | Sekundärknapp textfärg      |
| `input_focus_border`     | Inmatningsfokus kantfärg    |

<Info>
  Alla färgfält accepterar standard CSS-färgformat:

  * Hex: `#fff`, `#ffffff`, `#ffffffff`
  * RGB/RGBA: `rgb(255, 255, 255)`, `rgba(255, 255, 255, 0.5)`
  * HSL/HSLA: `hsl(120, 100%, 50%)`, `hsla(120, 100%, 50%, 0.5)`
  * Namngivna färger: `red`, `blue`, `transparent`
</Info>

### Exempel

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customization: {
    theme_config: {
      // Custom fonts
      font_primary_url: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',
      font_size: 'md',
      font_weight: 'medium',
      radius: '8px',
      pay_button_text: 'Complete Purchase',
      
      // Light mode colors
      light: {
        bg_primary: '#ffffff',
        bg_secondary: '#f5f5f5',
        text_primary: '#1a1a1a',
        text_secondary: '#666666',
        button_primary: '#0066ff',
        button_primary_hover: '#0052cc',
        button_text_primary: '#ffffff',
        border_primary: '#e0e0e0'
      },
      
      // Dark mode colors
      dark: {
        bg_primary: '#1a1a1a',
        bg_secondary: '#2d2d2d',
        text_primary: '#ffffff',
        text_secondary: '#a0a0a0',
        button_primary: '#3385ff',
        button_primary_hover: '#4d99ff',
        button_text_primary: '#ffffff',
        border_primary: '#404040'
      }
    }
  },
  return_url: 'https://yoursite.com/return'
});
```

<Tip>
  Du behöver inte ange alla färgegenskaper. Eventuella odefinierade egenskaper kommer att använda standard tema värden.
</Tip>
