> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vellaro.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Novità

> I cambiamenti dell'API rilevanti per chi sviluppa su Vellaro.

## 11 ottobre 2026

### Carrello

* All'accesso il carrello ospite si unisce a quello dell'account, anche al checkout: niente
  più articoli persi quando il negozio chiede di accedere per pagare.
  [Dettagli](/guides/build-storefront).

## 10 ottobre 2026

Un grande rilascio dell'area admin e della vetrina. Le modifiche sono pensate per non rompere
i client esistenti, ma alcune richiedono un intervento. La voce comprende anche le modifiche
del 9 ottobre non ancora descritte qui: «esci da tutti i dispositivi», 2FA attivata con la
password attuale, errori di validazione nella busta standard (`validation.failed`).

<Warning>
  **Da fare nei tuoi client**

  * Salva **sempre** il refresh token nuovo restituito da ogni `POST /auth/refresh`.
  * Nel carrello mostra `unit_price`, non `variant.price` o `variant.sale_price`.
  * Prendi i metodi di pagamento da `GET /settings/payment-methods` e manda sempre
    `payment_method`: il checkout rifiuta i metodi spenti.
  * Tratta lo stato `refunded` (Admin API e MCP) come un movimento di denaro.
  * Traduci i nuovi `error_code` elencati qui sotto.
</Warning>

### Sicurezza e autenticazione

* **Refresh token a rotazione** con rilevamento del riuso: ogni rinnovo restituisce un refresh
  token nuovo. Tolleranza di 60 secondi per schede e richieste concorrenti; per un account
  staff il riuso di un token superato chiude la sessione (401 `auth.refresh_token_reused`). I
  token emessi prima del rilascio valgono una volta e passano al nuovo schema.
  [Dettagli](/authentication).
* `POST /auth/logout` chiude la sessione del refresh token presentato; `?all=true` chiude tutte
  le sessioni dell'account (401 `auth.session_revoked` sui token di prima).
* Codici TOTP **monouso** e **10 codici di recupero** alla prima attivazione della 2FA,
  rigenerabili con `POST /auth/2fa/recovery-codes`. `GET /auth/me` espone
  `recovery_codes_remaining` e `is_owner`.
* Negozio eliminato: 403 `auth.tenant_unavailable` al login e al refresh.

### Carrello, checkout e buoni regalo

* Il carrello espone `items[].unit_price` (il prezzo applicato), `min_order_total` e
  `guest_checkout_enabled`; `variant.sale_price` è `null` fuori dalla finestra del saldo.
* Il checkout applica le regole del negozio: 422 `checkout.min_order_not_met`, 401
  `checkout.login_required`, 422 `checkout.payment_method_disabled`.
* **Buono regalo** al checkout con `voucher_code`: saldo prenotato e rilasciato se il pagamento
  non va a buon fine, ordine pagato direttamente (`payment_method: "voucher"`) se il buono copre
  tutto, errori `voucher.*`.
* Lo sconto di un coupon non supera il subtotale; il coupon «spedizione gratuita» azzera la
  spedizione.
* «Paga ora» (`POST /orders/{order_id}/pay`, riapre il pagamento di un ordine online) è ora
  documentato; la cattura PayPal di un ordine annullato risponde 400 `order.not_payable`.
  [Dettagli](/guides/build-storefront).

### Prezzi e catalogo

* Carrello e checkout applicano i **prezzi speciali** e la regola dei gruppi clienti: ciò che
  il carrello mostra è ciò che il checkout addebita.
* Il dettaglio prodotto ha `special_price` e `stock_status_name`; i filtri `in_stock`, di prezzo
  e l'ordinamento per prezzo lavorano sul prezzo effettivo.
* Prezzi speciali e sconti a quantità solo con prezzo maggiore di zero (422
  `product.price_rule_not_positive`).

### Ordini, abbonamenti e vetrina

* La cronologia ordine vista dal cliente contiene solo cambi di stato e note pubbliche.
* Abbonamenti: nuovo stato terminale `completed`; all'acquisto si paga il prezzo del prodotto
  e la prova sposta solo il primo rinnovo.
* `POST /marketing/track` conta le visite dai link di campagna; `GET /settings/store-info`
  espone `catalog` e `seo`.

### Admin API

* Rimborsi e «segna pagato» solo per alcuni ruoli (403 `order.refund_forbidden`,
  `order.payment_forbidden`); i dati di pagamento degli affiliati richiedono anche il
  permesso `reports`.
* Titolare del negozio stabile e protetto (`is_owner`, 403 `user.owner_protected` e
  `user.owner_only`, 409 `user.last_admin`).
* I token API non gestiscono utenti né credenziali (403 `auth.api_token_forbidden`).
* `PATCH /admin/orders/{id}` a `refunded` esegue un **rimborso vero**; i resi partono dalle righe
  dell'ordine.
* `POST /admin/products` salva tutti i campi e crea le varianti inline (409
  `product.sku_taken`).
* Coupon validati ed eliminazione vera di quelli mai usati; buoni regalo con saldo e storico.
* Piani ricorrenti: `duration` = intervallo, `cycle` = addebiti totali.
* Anonimizzazione del cliente, commissioni degli affiliati per valuta, report con ricavi netti
  nella valuta e nel fuso del negozio, impostazione `orders.guest_checkout_allowed`.
  [Dettagli](/guides/admin-api).

### Webhook

* URL solo https verso host pubblici (422 `webhooks.url_https_required`,
  `webhooks.url_not_public`, `webhooks.url_invalid`).
* Invio di prova, rinvio di una consegna, rotazione del segreto ed estratto sicuro della
  risposta nel registro delle consegne. [Dettagli](/webhooks).
* Nuovo evento `order.refunded` per i rimborsi totali e parziali; ogni evento d'ordine porta
  `amount_refunded`.

### MCP

* Il tool admin `update_order_status` con `status: "refunded"` esegue un **rimborso vero** del
  residuo sul gateway di pagamento. Gli altri tool sono invariati. [Dettagli](/ai-mcp).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.