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

# v1.75.0 (January 23, 2026)

> Product collections, RevolutPay & Billie payment methods for GBP one-time payments, checkout session preview, metadata in change plan requests, invoice_url field, discount validation endpoint, and enhanced dashboard filtering

## Nuove funzionalità

### 1. **Product Collections**

Raggruppa prodotti correlati per offrire esperienze di checkout unificate, selezione dei piani e percorsi di upgrade/downgrade senza interruzioni nel Customer Portal.

<Frame>
  <img src="https://mintcdn.com/dodopayments/2YrxTqbaYgAm54C_/images/product-collection/checkout-page.png?fit=max&auto=format&n=2YrxTqbaYgAm54C_&q=85&s=1890932384bc32c8126c7993f3581855" alt="Pagina di checkout della collezione di prodotti che mostra più opzioni di piano" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

**Vantaggi principali**

* **Checkout basato sulle collezioni**: mostra tutti i prodotti di una collezione in un’unica vista di checkout, permettendo ai clienti di confrontare e scegliere il piano preferito
* **Gestione organizzata dei prodotti**: raggruppa prodotti correlati (es. Starter, Pro, Enterprise) sotto un’unica collezione
* **Integrazione con il Customer Portal**: consenti ai clienti di effettuare upgrade o downgrade tra prodotti della stessa collezione
* **Controllo del merchant**: abilita, disabilita e riordina i prodotti all’interno di ciascuna collezione

**Come funziona**

Crea una sessione di checkout per una 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'
});

// Redirect customer to the checkout
window.location.href = session.checkout_url;
```

<Check>
  Risultato: un’esperienza di checkout unificata in cui i clienti possono visualizzare e selezionare tutti i prodotti disponibili nella tua collezione.
</Check>

<Info>
  Il checkout per collezioni è ideale per le aziende in abbonamento che desiderano far confrontare ai clienti piani affiancati prima dell’acquisto.
</Info>

Per saperne di più: [Product Collections Guide](/features/product-collections)

### 2. **RevolutPay & Billie Payment Methods for GBP Currency**

Opzioni di pagamento ampliate con RevolutPay e Billie ora disponibili a livello globale per transazioni in GBP una tantum, offrendo ai clienti maggiore flessibilità nel metodo di pagamento.

**Nuovi metodi di pagamento**

| Payment Method | Supported Countries | Currency | Subscription Support |
| -------------- | ------------------- | -------- | -------------------- |
| **RevolutPay** | Global              | GBP      | No (one-time only)   |
| **Billie**     | Global              | GBP      | No (one-time only)   |

* **RevolutPay** – pagamenti rapidi e fluidi per gli utenti Revolut a livello globale
* **Billie** – soluzione B2B Buy Now Pay Later che consente alle aziende di offrire condizioni di pagamento flessibili ai propri clienti

<Info>
  Questi metodi sono disponibili automaticamente per transazioni in GBP. Non è necessaria alcuna configurazione aggiuntiva.
</Info>

Per saperne di più: [Payment Methods](/features/payment-methods)

### 3. **Checkout Session Preview**

Anteprima delle sessioni di checkout prima della creazione, per calcolare prezzi, tasse, sconti e totali accurati. Mostra ai clienti i prezzi reali prima di procedere al checkout.

**Come funziona**

```typescript theme={null}
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'pdt_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.current_breakup.subtotal);
console.log('Tax:', preview.current_breakup.tax);
console.log('Discount:', preview.current_breakup.discount);
console.log('Total:', preview.total_price);
```

**Casi d’uso**

* **Visualizzazione prezzi personalizzata**: mostra i totali accurati inclusi i costi fiscali prima del checkout
* **Validazione sconti**: verifica i codici sconto e mostra i risparmi ai clienti
* **Supporto multi-valuta**: anteprima dei prezzi in valute diverse
* **Riepiloghi del carrello**: crea interfacce personalizzate del carrello con prezzi in tempo reale

<Card title="Preview API Reference" icon="code" href="/api-reference/checkout-sessions/preview">
  Consulta la documentazione completa dell’endpoint di anteprima.
</Card>

### 4. **Metadata Support in Change Plan Requests**

Invia metadati personalizzati durante il cambio di piano di abbonamento, consentendo un migliore tracciamento e integrazione con i sistemi interni durante le transizioni di piano.

```javascript theme={null}
// Adding metadata when changing a subscription plan
await client.subscriptions.changePlan('sub_123', {
  product_id: 'pdt_premium',
  proration_billing_mode: 'prorated_immediately',
  quantity: 1,
  metadata: {
    upgrade_reason: 'feature_request',
    previous_plan: 'basic',
    sales_rep: 'john@company.com'
  }
});
```

**Casi d’uso**

* **Tracciare i motivi di upgrade/downgrade**: conserva la ragione del cambio di piano da parte dei clienti
* **Collegamento ai record CRM**: associa le modifiche di piano alle attività di vendita
* **Classificazione interna**: etichetta i cambi di piano per reportistica e analisi
* **Tracce di audit**: conserva i log di chi ha avviato le modifiche di piano

<Info>
  I metadati vengono inclusi negli eventi webhook, facilitando l’elaborazione dei cambi di piano con i dati personalizzati.
</Info>

Per saperne di più: [Metadata Guide](/api-reference/metadata) | [Change Plan API](/api-reference/subscriptions/change-plan)

### 5. **`invoice_url` Field in Payment Response and Payment Link Response**

La Payment Response e la Payment Link Response includono ora un campo `invoice_url`, che fornisce accesso diretto alla fattura associata a ciascun pagamento.

```json theme={null}
{
  "payment_id": "pay_2IjeQm4hqU6RA4Z4kwDee",
  "status": "succeeded",
  "invoice_url": "https://dodopayments.com/invoices/inv_2IsUnWGtRKFLxk7xAQeyt",
  "total_amount": 9900,
  "currency": "USD",
  // ... other fields
}
```

**Casi d’uso**

* **Comunicazione con il cliente**: invia direttamente i link alle fatture ai clienti
* **Integrazione contabile**: collega i pagamenti alle fatture nel software di contabilità
* **Portali self-service**: consenti ai clienti di accedere facilmente alle loro fatture
* **Registrazione**: mantieni riferimenti diretti ai documenti delle fatture

<Card title="Get Payment API" icon="code" href="/api-reference/payments/get-payments-1">
  Consulta lo schema della Payment Response.
</Card>

### 6. **Validate Discount by Code Name Endpoint**

Nuovo endpoint API per convalidare e recuperare i codici sconto tramite il nome del codice (es. “SAVE20”) anziché usare l’ID interno dello sconto. Verifica l’idoneità degli sconti prima di applicarli al checkout.

```javascript theme={null}
// Validate a discount code before checkout
const discount = await client.discounts.retrieveByCode('SAVE20');

console.log('Discount type:', discount.type);
console.log('Discount value:', discount.amount);
console.log('Valid until:', discount.expires_at);
```

**Vantaggi**

* **Validazione pre-checkout**: verifica i codici sconto prima di creare sessioni di checkout
* **Feedback in tempo reale**: informa i clienti se il codice è valido
* **Gestione degli errori**: intercetta codici non validi o scaduti in anticipo
* **Interfacce sconto personalizzate**: crea campi di input per i codici con validazione istantanea

<Card title="Get Discount by Code API" icon="code" href="/api-reference/discounts/get-discount-by-code">
  Consulta la documentazione completa dell’endpoint.
</Card>

### 7. **Enhanced Filtering Capabilities for Customers, Discounts, and License Keys**

Nuovi filtri API per elenchi di Customers, Discounts e License Keys, semplificando la ricerca e la gestione dei dati in modo programmato.

**Filtri API Customers**

| Filter           | Description                                                             |
| ---------------- | ----------------------------------------------------------------------- |
| `email`          | Filtra per email del cliente                                            |
| `name`           | Filtra per nome del cliente (corrispondenza parziale, case-insensitive) |
| `created_at_gte` | Filtra i clienti creati a partire da questo timestamp                   |
| `created_at_lte` | Filtra i clienti creati entro questo timestamp                          |

```javascript theme={null}
// Find customers by name created in the last 30 days
const customers = await client.customers.list({
  name: 'John',
  created_at_gte: '2026-01-01T00:00:00Z'
});
```

**Filtri API Discounts**

| Filter          | Description                                                                 |
| --------------- | --------------------------------------------------------------------------- |
| `code`          | Filtra per codice sconto (corrispondenza parziale, case-insensitive)        |
| `discount_type` | Filtra per tipo di sconto (percentuale)                                     |
| `active`        | Filtra per stato attivo (true = non scaduto, false = scaduto)               |
| `product_id`    | Filtra per restrizione prodotto (solo sconti applicabili a questo prodotto) |

```javascript theme={null}
// Find active percentage discounts for a specific product
const discounts = await client.discounts.list({
  active: true,
  discount_type: 'percentage',
  product_id: 'pdt_123'
});
```

**Filtri API License Keys**

| Filter           | Description                                                          |
| ---------------- | -------------------------------------------------------------------- |
| `customer_id`    | Filtra per ID cliente                                                |
| `status`         | Filtra per stato della license key (`active`, `expired`, `disabled`) |
| `product_id`     | Filtra per ID prodotto                                               |
| `created_at_gte` | Filtra le license key create a partire da questo timestamp           |
| `created_at_lte` | Filtra le license key create entro questo timestamp                  |

```javascript theme={null}
// Find active license keys for a specific product
const licenseKeys = await client.licenseKeys.list({
  status: 'active',
  product_id: 'pdt_123'
});
```

<CardGroup cols={3}>
  <Card title="List Customers API" icon="users" href="/api-reference/customers/get-customers">
    Consulta la documentazione completa delle API Customers.
  </Card>

  <Card title="List Discounts API" icon="percent" href="/api-reference/discounts/list-discounts">
    Consulta la documentazione completa delle API Discounts.
  </Card>

  <Card title="List License Keys API" icon="key" href="/api-reference/licenses/list-license-keys">
    Consulta la documentazione completa delle API License Keys.
  </Card>
</CardGroup>

### 8. **UI/UX Improvements in Dashboard**

Questa release include numerosi miglioramenti UI/UX nella dashboard per un’esperienza più intuitiva e rifinita.

**Punti salienti**

* Navigazione e coerenza del layout migliorate
* Interazioni con le tabelle dati potenziate
* Stati di caricamento e feedback migliori
* Elementi visivi rifiniti
* Migliore reattività su dispositivi mobili
