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

# Caratteristiche del Checkout

> Checkout ottimizzato per la conversione, conforme a livello globale, con supporto multi-valuta, multi-lingua, calcolo automatico delle tasse, codici sconto, add-on e raccolta intelligente degli indirizzi.

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

<Info>
  Il checkout di Dodo Payments è ottimizzato per la conversione e conforme a livello globale, progettato per prodotti digitali e aziende SaaS. Supporta più valute, lingue, tasse, sconti, componenti aggiuntivi e flussi di conformità orientati al business.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Crea sessioni di checkout ospitate in modo programmatico.
  </Card>

  <Card title="Preview Checkout" icon="eye" href="/api-reference/checkout-sessions/preview">
    Calcola prezzi e tasse prima di creare una sessione.
  </Card>

  <Card title="Payment Methods" icon="credit-card" href="/features/payment-methods">
    Metodi di pagamento supportati e opzioni di configurazione.
  </Card>
</CardGroup>

## Valuta Adattiva

La Valuta Adattiva consente ai clienti di pagare nella loro valuta locale preferita, migliorando la fiducia e i tassi di conversione.

### Come Funziona

1. **Abilita**: Abilita Valuta Adattiva da **Impostazioni → Business**
2. **Seleziona**: I clienti possono cambiare valuta direttamente al checkout
3. **Converti**: I prezzi sono convertiti dinamicamente usando tassi di cambio in tempo reale
4. **Mostra**: L'importo finale pagabile è mostrato in modo trasparente prima del pagamento

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c1.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=c2f9ee4b1748448d4ab7ab23954dcc64" alt="Selettore di valuta al 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">
  Scopri di più sulle valute supportate, le commissioni di conversione e la gestione dei rimborsi.
</Card>

## Checkout Multilingue

Dodo Payments supporta più lingue nella pagina di checkout, consentendo ai clienti di completare i pagamenti in una lingua con cui si sentono a proprio agio.

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

### Punti Chiave

* Selettore di lingua disponibile direttamente al checkout
* Testo dell'interfaccia utente, etichette e messaggi di sistema sono localizzati
* Migliora l'accessibilità e la conversione internazionale

### Lingue Supportate

La pagina di checkout supporta 21 lingue:

| Lingua      | Codice |
| ----------- | ------ |
| Arabo       | `ar`   |
| Catalano    | `ca`   |
| Cinese      | `zh`   |
| Olandese    | `nl`   |
| Inglese     | `en`   |
| Francese    | `fr`   |
| Tedesco     | `de`   |
| Ebraico     | `he`   |
| Indonesiano | `id`   |
| Italiano    | `it`   |
| Giapponese  | `ja`   |
| Coreano     | `ko`   |
| Malese      | `ms`   |
| Polacco     | `pl`   |
| Portoghese  | `pt`   |
| Rumeno      | `ro`   |
| Russo       | `ru`   |
| Spagnolo    | `es`   |
| Svedese     | `sv`   |
| Tailandese  | `th`   |
| Turco       | `tr`   |

<Tip>
  Puoi forzare una lingua specifica nel checkout impostando il parametro `force_language` durante la creazione di una sessione di checkout. Consulta l'[API Checkout Sessions](/developer-resources/checkout-session#14-forcing-a-language) per maggiori dettagli.
</Tip>

## Calcolo automatico delle tasse

Le tasse vengono calcolate automaticamente in base alla località di fatturazione del cliente, garantendo la conformità a GST, IVA e imposte sulle vendite senza configurazioni manuali.

### Come funziona il calcolo delle tasse

<Steps>
  <Step title="Location Detection">
    Le regole fiscali vengono applicate in base al paese del cliente (e alla regione quando applicabile).
  </Step>

  <Step title="Dynamic Updates">
    L'importo delle tasse si aggiorna automaticamente quando:

    * Cambia il paese
    * Viene aggiornato l'indirizzo
  </Step>

  <Step title="Transparent Display">
    La ripartizione finale delle tasse viene mostrata chiaramente prima del pagamento.
  </Step>
</Steps>

<Tip>
  Il calcolo delle tasse è completamente automatico. Non è necessaria alcuna configurazione manuale per beni digitali standard e prodotti SaaS.
</Tip>

## Supporto per l'ID fiscale aziendale

Per le aziende registrate, il checkout consente ai clienti di inserire il proprio ID fiscale aziendale (ad esempio, numero IVA/GST).

### Cosa succede quando viene inserito un ID fiscale

* L'idoneità fiscale viene convalidata in tempo reale
* Vengono applicate eventuali esenzioni fiscali o regole di inversione contabile
* L'importo delle tasse si aggiorna istantaneamente durante il checkout

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

<Info>
  Questo è particolarmente utile per SaaS B2B e servizi digitali in cui i clienti business possono essere idonei a esenzioni fiscali.
</Info>

## Codici sconto

I clienti possono applicare codici sconto o promozionali creati nella dashboard direttamente nella pagina di checkout.

### Esperienza di checkout

1. Il cliente inserisce il codice sconto
2. Lo sconto viene convalidato istantaneamente
3. Il prezzo aggiornato e il risparmio vengono mostrati chiaramente

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

### Integrazione API

Pre-applica uno o più codici sconto impilati o abilita il campo di input per gli sconti:

```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` accetta un array di un massimo di 20 codici che si impilano in ordine. Il campo singolare `discount_code` è obsoleto ma funziona ancora — le integrazioni esistenti non devono cambiare immediatamente. Passa a `discount_codes` quando conveniente per usare le impilature e la struttura di risposta più ricca.
</Info>

<Card title="Discount Codes" icon="percent" href="/features/discount-codes">
  Scopri come creare e gestire i codici sconto.
</Card>

<Card title="Validate Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
  Cerca e valida gli sconti utilizzando i nomi dei codici.
</Card>

## Raccolta Indirizzi Intelligente

Il checkout supporta l'inserimento flessibile degli indirizzi per un completamento più rapido.

### Opzioni Disponibili

| Opzione                                       | Descrizione                                   |
| --------------------------------------------- | --------------------------------------------- |
| **Completamento automatico indirizzi Google** | Selezione rapida con completamento automatico |
| **Inserimento manuale**                       | Controllo completo per indirizzi completi     |
| **Selezione del paese**                       | Guida alla logica fiscale e di conformità     |

<Tip>
  La raccolta degli indirizzi bilancia velocità, precisione e copertura globale per massimizzare la conversione garantendo la conformità.
</Tip>

## Raccolta del Numero di Telefono

Controlla se il campo del numero di telefono appare al checkout — e se è richiesto — usando i flag delle funzionalità della sessione di checkout.

| Flag                            | Predefinito | Comportamento                                                                                               |
| ------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------- |
| `allow_phone_number_collection` | `true`      | Mostra il campo del numero di telefono nel modulo di checkout                                               |
| `require_phone_number`          | `false`     | Rende il campo del numero di telefono obbligatorio (la verifica del modulo ne richiede un valore non vuoto) |

```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` richiede `allow_phone_number_collection: true`. L'API rifiuta le sessioni in cui la raccolta telefonica è disabilitata mentre il numero di telefono è richiesto.
</Warning>

<Tip>
  Usa `require_phone_number` per SaaS B2B, settori regolamentati o qualsiasi flusso in cui è necessario un canale di contatto verificato per supporto, revisione delle frodi o conformità.
</Tip>

## Campi Personalizzati

Raccogli informazioni aggiuntive dai clienti durante il checkout definendo campi del modulo personalizzati. Questo è utile per raccogliere dati come il nome dell'azienda, le dimensioni del team, la fonte di riferimento o qualsiasi altra informazione aziendale specifica.

### Tipi di Campo Disponibili

| Tipo       | Descrizione                      |
| ---------- | -------------------------------- |
| `text`     | Input di testo a singola linea   |
| `number`   | Input numerico                   |
| `email`    | Indirizzo email con validazione  |
| `url`      | URL con validazione              |
| `date`     | Selettore di data                |
| `dropdown` | Seleziona da opzioni predefinite |
| `boolean`  | Toggle Sì/No                     |

### Esempio

```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>
  Le risposte dei clienti sono automaticamente incluse nei payload dei webhook (`payment.succeeded`, `subscription.active`) e nelle risposte API tramite l'array `custom_field_responses`. Puoi definire fino a 5 campi personalizzati per sessione di checkout.
</Info>

<Card title="Custom Fields Guide" icon="input-text" href="/developer-resources/checkout-session#15-collecting-custom-fields">
  Scopri di più sulla configurazione dei campi personalizzati e sull'accesso alle risposte.
</Card>

## Accettazione delle Politiche sulla Privacy & Termini

Per garantire trasparenza legale e di conformità:

* I link alla [Politica sulla Privacy](https://dodopayments.com/privacy-policy) e ai [Termini dell'Acquirente](https://dodopayments.com/buyer-terms) sono chiaramente visualizzati al checkout
* I clienti riconoscono esplicitamente questi prima di completare il pagamento

<Info>
  Questo aiuta a soddisfare i requisiti globali di protezione dei consumatori e di privacy dei dati, inclusa la conformità GDPR.
</Info>

## Checkout della Collezione

Le Collezioni di Prodotti consentono un'esperienza di checkout unificata in cui i clienti possono visualizzare e selezionare tra più prodotti correlati (ad es., piani Starter, Pro, Enterprise) in un unico checkout.

### Come Funziona

1. **Tutti i prodotti visualizzati**: I clienti vedono ogni prodotto attivo nella collezione
2. **Primo prodotto preselezionato**: Il primo prodotto nella collezione è selezionato automaticamente
3. **Confronta opzioni**: I clienti possono confrontare prezzi e funzionalità prima di scegliere
4. **Selezione singola**: Dopo aver selezionato un prodotto, il checkout procede con il flusso di pagamento standard

### Creazione di un Checkout della Collezione

```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>
  Quando si utilizza `product_collection_id`, passa un array `product_cart` vuoto. I codici sconto non possono essere pre-applicati alla creazione della sessione.
</Warning>

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Scopri come creare e gestire le collezioni di prodotti per esperienze di checkout unificate.
</Card>

## Configurazione della Sessione di Checkout

Controlla il comportamento del checkout usando l'API delle Sessioni di Checkout:

```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>
  Dopo il pagamento, i clienti sono reindirizzati al tuo `return_url` con parametri di query aggiunti automaticamente — tra cui `payment_id` o `subscription_id`, `status`, `email` e `license_key` (se applicabile). Consulta la [Guida alle Sessioni di Checkout](/developer-resources/checkout-session#request-body) per l'elenco completo.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    Riferimento completo all'API delle sessioni di checkout.
  </Card>

  <Card title="Checkout Integration Guide" icon="book" href="/developer-resources/checkout-session">
    Guida passo passo per integrare il checkout.
  </Card>
</CardGroup>

## Personalizzazione Tema di Checkout

Personalizza l'aspetto della pagina di checkout per adattarsi al tuo marchio utilizzando il parametro `customization.theme_config` quando crei una sessione di checkout tramite l'API. Configura colori, caratteri, raggio bordo e testo del pulsante per modalità chiara e scura.

<Frame>
  <img src="https://mintcdn.com/dodopayments/rTHkQICkStFgSdh-/images/checkout/theme-example.png?fit=max&auto=format&n=rTHkQICkStFgSdh-&q=85&s=5277b69d67c90fd87e7c5d9c125fee12" alt="Pagina di checkout con tema personalizzato" 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">
  Configura i temi visivamente dalla dashboard con temi pre-costruiti, tipografia, colori e anteprima dal vivo.
</Card>

<Info>
  Questa sezione copre la configurazione del tema **lato server API** utilizzando `customization.theme_config`. Se utilizzi il **Checkout SDK** (overlay o inline checkout), consulta le sezioni di personalizzazione del tema in [Overlay Checkout](/developer-resources/overlay-checkout#theme-customization) o [Inline Checkout](/developer-resources/inline-checkout#theme-customization) che utilizzano proprietà camelCase (es. `bgPrimary` invece di `bg_primary`).
</Info>

### Opzioni di Configurazione del Tema

| Proprietà            | Descrizione                                                                                   |
| -------------------- | --------------------------------------------------------------------------------------------- |
| `light`              | Configurazione colore per la modalità chiara                                                  |
| `dark`               | Configurazione colore per la modalità scura                                                   |
| `font_primary_url`   | URL per il carattere primario                                                                 |
| `font_secondary_url` | URL per il carattere secondario                                                               |
| `font_size`          | Dimensione del carattere: `xs`, `sm`, `md`, `lg`, `xl`, `2xl`                                 |
| `font_weight`        | Peso del carattere: `normal`, `medium`, `bold`, `extraBold`                                   |
| `radius`             | Raggio del bordo per elementi UI (es. `4px`, `0.5rem`, `8px`)                                 |
| `pay_button_text`    | Testo personalizzato per il pulsante di pagamento (es. "Completa l'Acquisto", "Abbonati Ora") |

### Configurazione del Colore (Modalità Chiara/Scura)

Ogni modalità (`light` e `dark`) supporta le seguenti proprietà di colore:

| Proprietà                | Descrizione                                           |
| ------------------------ | ----------------------------------------------------- |
| `bg_primary`             | Colore primario dello sfondo                          |
| `bg_secondary`           | Colore secondario dello sfondo                        |
| `text_primary`           | Colore primario del testo                             |
| `text_secondary`         | Colore secondario del testo                           |
| `text_placeholder`       | Colore del testo di segnaposto                        |
| `text_error`             | Colore del testo di errore                            |
| `text_success`           | Colore del testo di successo                          |
| `border_primary`         | Colore primario del bordo                             |
| `border_secondary`       | Colore secondario del bordo                           |
| `button_primary`         | Colore di sfondo del pulsante primario                |
| `button_primary_hover`   | Colore al passaggio del mouse sul pulsante primario   |
| `button_secondary`       | Colore di sfondo del pulsante secondario              |
| `button_secondary_hover` | Colore al passaggio del mouse sul pulsante secondario |
| `button_text_primary`    | Colore del testo del pulsante primario                |
| `button_text_secondary`  | Colore del testo del pulsante secondario              |
| `input_focus_border`     | Colore del bordo a fuoco dell'input                   |

<Info>
  Tutti i campi colore accettano i formati del colore CSS standard:

  * 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)`
  * Colori denominati: `red`, `blue`, `transparent`
</Info>

### Esempio

```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>
  Non è necessario specificare tutte le proprietà del colore. Qualsiasi proprietà non specificata utilizzerà i valori del tema predefiniti.
</Tip>
