v2 — Ultimo rilascio: 29 ottobre 2026
Apps — bannerMedia
GET appsGET apps/{slug}
Se bannerMedia è definito, il blocco della prima immagine viene rimosso da description e contentSections, anche se diverso dal banner. Applicato a ogni sincronizzazione; il contenuto WordPress viene conservato. Senza banner il contenuto resta invariato. Risincronizzare le app e sostituire il contenuto locale. V1 invariata.
Documenti riservati a WordPress
GET productsGET products/{slug}GET solutionsGET solutions/{slug}GET servicesGET services/{slug}
I documenti con classe api-hidden sono esclusi durante la sincronizzazione V2. Restano disponibili in WordPress. Nessun nuovo campo JSON. Dopo il rilascio, sincronizzare nuovamente e sostituire gli array locali documents. V1 invariata.
Estratti completi delle app
GET appsGET apps/{slug}
Gli estratti (subtitle) non sono più limitati a 255 caratteri. Il campo resta testo senza HTML. Compatibile con il contratto esistente; risincronizzare le app per ottenere i testi completi. V1 invariata.
Video nei contenuti delle app
GET appsGET apps/{slug}
Gli shortcode video ACF diventano lettori HTML YouTube o Vimeo nella loro posizione in description e contentSections. L’array videos resta invariato. Le righe api-hidden restano escluse. Dopo la pubblicazione, risincronizzare i contenuti e consentire questi iframe nel client. V1 invariata.
Contenuti riservati a WordPress
GET appsGET apps/{slug}GET servicesGET services/{slug}GET solutionsGET solutions/{slug}GET productsGET products/{slug}GET categoriesGET categories/{slug}
Gli elementi HTML o WPBakery con classe api-hidden e i loro discendenti sono esclusi dalle descrizioni e sezioni strutturate del catalogo V2. WordPress resta invariato. Nessun nuovo campo JSON; eseguire una sincronizzazione completa per rimuovere questi contenuti dalle copie locali. V1 invariata.
Rimozione dei prezzi
GET productsGET products/{slug}GET apps/{slug}GET solutions/{slug}GET services/{slug}
Il campo price (prima oggetto importo/valuta o null) viene rimosso dai prodotti, anche associati. Il filtro price viene rimosso e le selezioni ignorate. Modifica incompatibile V2: rimuovere letture, visualizzazioni e filtri dei prezzi; eseguire una sincronizzazione completa per eliminare i prezzi memorizzati. V1 invariata.
Secondo pulsante facoltativo
GET page/{slug}
Secondo pulsante nelle schede HTML data.content: etichetta e URL indipendenti, entrambi richiesti. Classe api-sync-button--secondary. Compatibile con le schede esistenti, nessun nuovo campo JSON; adattare lo stile se necessario.
Serie del prodotto
GET productsGET products/{slug}
Aggiunta compatibile di series agli elenchi e ai dettagli dei prodotti: { label, slug, order }, oppure null senza serie. Etichetta e slug seguono la lingua del prodotto. series.order indica la posizione del prodotto nella serie, distinta dall’ordine generale; vale null se non specificata. Campi esistenti invariati. Nessuna migrazione richiesta; gestire null prima di usare la serie.
Collegamenti a pagine ricreate
GET menusGET menu/{slug}
Una voce di menu verso una pagina attiva rimane visibile quando la pagina viene ricreata con lo stesso slug di una pagina eliminata. Le destinazioni eliminate o non autorizzate restano nascoste. Correzione compatibile con o senza lang, senza modifiche al formato JSON.
Origine del banner di categoria
GET categoriesGET categories/{slug}
bannerImage utilizza ora « Bannière Sheet Category » (banner-sheet-category) invece di « Bannière Product Sheet » (category_image). Nessun ripiego sul vecchio campo: un valore assente o un’immagine non valida restituisce null. Nome e formato JSON rimangono invariati negli elenchi, nei dettagli e nelle sottocategorie; primaryMedia resta indipendente. Compilare il nuovo campo prima della prossima sincronizzazione per conservare un banner esistente.
Slug delle raccolte nei menu
GET menu/{slug}
Le destinazioni di tipo collection includono slug, con lo stesso valore di collection (apps, solutions o services). Disponibile con o senza lang, in items[].target o nelle voci raggruppate per lingua. Aggiunta compatibile in v2; gli altri tipi restano invariati.
Immagini dei link
GET apps/{slug}
Ogni voce di links include media: un oggetto multimediale nello stesso formato di primaryMedia, oppure null se il link non ha un’immagine valida. Immagine e metadati provengono dalla scheda nella lingua richiesta, senza ricorrere ad altre lingue. I campi esistenti sono conservati; aggiunta compatibile solo in v2. Gli elenchi delle app non cambiano.
Immagine in evidenza delle pagine
GET pagesGET page/{slug}
L’immagine in evidenza di WordPress viene esposta come bannerMedia negli elenchi e nei dettagli delle pagine, nel formato multimediale del catalogo. null se non è configurata un’immagine valida. Non viene aggiunto primaryMedia alle pagine. I metadati provengono dall’immagine della pagina nella lingua richiesta, senza ripiego su un’altra lingua. Aggiunta compatibile solo in v2.
Immagini di intestazione delle categorie
GET categoriesGET categories/{slug}
Le categorie espongono bannerImage, un oggetto multimediale nello stesso formato di primaryMedia, dal campo «Category image» dell’intestazione. Disponibile negli elenchi, nei dettagli e nelle sottocategorie; null se non è configurata un’immagine valida. La miniatura primaryMedia rimane indipendente. Nessun ripiego su un’altra lingua. Aggiunta compatibile solo in v2.
Migrazione da v1 a v2 — impatto per i consumatori
GET productsGET products/{slug}GET categoriesGET categories/{slug}GET appsGET apps/{slug}GET solutionsGET solutions/{slug}GET servicesGET services/{slug}GET pagesGET page/{slug}GET menusGET menu/{slug}
Per chi interroga direttamente l’API con una licenza autorizzata per i gruppi richiesti e accetta campi JSON aggiuntivi, la modifica principale consiste nel sostituire /api/ con /api/v2/. Esempio: /api/products?lang=fr diventa /api/v2/products?lang=fr.
**Invariati:** token di licenza, autenticazione (Authorization: Bearer o x-api-token), lingua, filtri, paginazione e campi esistenti. L’uso di groups, groupsByLanguage e bannerMedia è facoltativo; i client che rifiutano proprietà JSON sconosciute devono adeguare lo schema.
**Contenuti accessibili:** v2 applica i gruppi autorizzati della licenza. Le licenze esistenti hanno ricevuto tutti i gruppi disponibili alla migrazione; quelli successivi non vengono concessi automaticamente. Senza gruppi autorizzati, le liste sono vuote e i dettagli restituiscono 404. I vecchi token tecnici senza licenza con gruppi non danno accesso al catalogo v2.
**Catalogo locale:** avviare una sincronizzazione completa v2 senza riutilizzare delta o syncUntil di v1. Sostituire il catalogo locale con il risultato completo autorizzato, poi usare il nuovo syncUntil v2. Una risposta 410 richiede una nuova sincronizzazione completa, in particolare dopo modifiche ai gruppi della licenza. Non serve per le consultazioni dirette senza copia locale.
V1 resta disponibile su /api/*; nessuna migrazione o redirezione automatica è imposta.
Gruppi nelle risposte
GET productsGET products/{slug}GET categoriesGET categories/{slug}GET appsGET apps/{slug}GET solutionsGET solutions/{slug}GET servicesGET services/{slug}GET pagesGET page/{slug}GET menusGET menu/{slug}
Le risorse nelle liste e nei dettagli includono groups, tutti gli slug dei gruppi assegnati (esempio: ["standard", "BSD"]). [] indica contenuti senza gruppo. Sono gruppi del contenuto, non permessi del token; il filtro non cambia. Anche i riferimenti strutturati identificati vengono arricchiti. I menu senza lang espongono groupsByLanguage, mantenendo data. Le cancellazioni delta non cambiano. Aggiunta compatibile solo v2; eseguire una lettura completa per aggiornare i dati salvati.
Accesso per gruppi
GET productsGET products/{slug}GET categoriesGET categories/{slug}GET appsGET apps/{slug}GET solutionsGET solutions/{slug}GET servicesGET services/{slug}GET pagesGET page/{slug}GET menusGET menu/{slug}
I contenuti v2 sono filtrati in base ai gruppi autorizzati per il token. Per i contenuti associati a più gruppi è sufficiente una corrispondenza. I contenuti senza gruppo restano accessibili ai token con almeno un gruppo valido. Un token senza gruppi non restituisce contenuti: liste vuote e dettagli con stato 404.
Le licenze esistenti riceveranno tutti i gruppi disponibili al momento della migrazione, senza aggiunta automatica dei gruppi futuri. I gruppi si selezionano alla creazione o alla modifica della licenza nel dashboard. Una nuova licenza senza selezione non ha accesso alla v2.
Il filtro riguarda anche contenuti collegati, menu, conteggi, filtri a faccette e paginazione. I link generati verso il catalogo usano le route v2. Quando un contenuto esce dai gruppi autorizzati, la sincronizzazione incrementale segnala una cancellazione.
Eseguire una sincronizzazione completa per questa modifica e dopo aver modificato i gruppi di una licenza, sostituendo i dati locali precedenti. Una richiesta incrementale incompatibile restituisce 410 e richiede una nuova sincronizzazione completa. La v1 resta invariata.
Aggiunta di bannerMedia
GET productsGET products/{slug}GET solutionsGET solutions/{slug}GET servicesGET services/{slug}GET appsGET apps/{slug}
Il campo bannerMedia è disponibile negli elenchi e nei dettagli per slug di prodotti, soluzioni, servizi e applicazioni. Contiene l’immagine del banner nello stesso formato di primaryMedia, oppure null se non è definito alcun banner per la lingua richiesta.