

Automazione da Catalogo Prodotti a Presentazione per Sales Decks (2026)
L'automazione da catalogo prodotti a presentazione significa che uno script legge ogni SKU dal tuo export Shopify, PIM o CSV e chiama due volte l'API 2Slides: POST /api/v1/slides/generate costruisce un sell sheet PPTX modificabile da un template brand fisso, e POST /api/v1/slides/create-like-this crea un launch deck con design a immagine che corrisponde al key visual della tua campagna. Un sell sheet di 6 pagine costa 60 crediti (circa $0,15); un launch deck 2K di 8 pagine costa 810 crediti (circa $2,03). È pensato per operazioni e-commerce, product marketer e agenzie che servono brand retail.
Punti chiave
- Una riga del catalogo diventa due deck: un sell sheet Fast PPT a 10 crediti per pagina, e un launch deck con design a immagine a 10 crediti per job più 100 crediti per pagina 2K.
- Ogni endpoint di generazione è limitato a 6 richieste al minuto per chiave, quindi il runner invia un job ogni 10 secondi e memorizza il
jobIdaccanto allo SKU. - Passare il key visual del brand come
referenceImageUrlmantiene ogni launch deck nello stesso look di campagna, conaspectRatio"16:9" per buyer e "4:5" per social. - La stessa richiesta con
responseLanguage: "German"o"Japanese"produce deck pronti per retailer cross-border senza un passaggio di traduzione separato. - 20 SKU al mese (sell sheet più launch deck) costano circa 17.400 crediti, che rientrano in un singolo pacchetto da $42,50.
A chi è rivolto
Gestisci operazioni e-commerce o product marketing per un brand, marketplace o agenzia, e ogni nuovo SKU o drop stagionale significa che qualcuno ricostruisce manualmente lo stesso sell sheet, line review deck e launch deck. Il catalogo contiene già nome, caratteristiche, specifiche, prezzo e immagine hero. Questa ricetta lo rende la fonte di verità e permette a uno script di generare deck prodotto da righe CSV su programma o evento Shopify.
Non usare questa ricetta se ti serve un solo deck personalizzato a trimestre. L'API conviene quando la stessa struttura si ripete su decine o centinaia di SKU.
Il flusso di lavoro a colpo d'occhio
| Passo | Strumento | Cosa succede | Endpoint 2Slides / crediti |
|---|---|---|---|
| 1 | Export Shopify, PIM o CSV | Normalizza ogni riga SKU in un brief testuale (nome, caratteristiche, specifiche, prezzo, retailer, URL immagine) | Nessuno |
| 2 | Script Node.js | Costruisce il sell sheet retailer come PPTX modificabile dal template brand | POST /api/v1/slides/generate, 10 crediti/pagina |
| 3 | Script Node.js | Costruisce il launch deck con design a immagine abbinato al key visual campagna, 16:9 e 4:5 | POST /api/v1/slides/create-like-this, 10 + 100 crediti/pagina (2K) |
| 4 | Script Node.js | Spazia le submission a 10 s di distanza, persiste la mappatura jobId-SKU, poll, upload su S3 | GET /api/v1/jobs/{jobId}, gratuito |
| 5 | Stesso script, righe extra | Genera varianti in tedesco e giapponese per retailer cross-border | Stessi endpoint, responseLanguage impostato per mercato |
| 6 | Shopify + Make | Evento product created lancia una HTTP Request così i nuovi SKU hanno deck in pochi minuti | Stessi endpoint, stessi crediti |
Passo 1: Normalizza il catalogo in un brief per SKU
Qualunque sia la fonte, appiattisci ogni SKU in una riga con le stesse colonne. Un CSV prodotto Shopify ha già Title, Body (HTML), Variant Price e Image Src; un export PIM di solito ha attributi strutturati. Aggiungi due colonne tue: target_retailer (chi vede questo sell sheet) e market (in quale lingua il retailer legge).
sku,name,features,specs,price,hero_image_url,target_retailer,market
NB-TRAIL-042,Northbound Trail Runner 2,"Suola Vibram; drop 8 mm; tomaia in mesh riciclato","Peso 265 g; Taglie EU 39-47; Colori: Moss, Slate",139.00,https://cdn.example-brand.com/nb-trail-042.jpg,Decathlon DE,de
NB-TRAIL-042,Northbound Trail Runner 2,"Suola Vibram; drop 8 mm; tomaia in mesh riciclato","Peso 265 g; Taglie EU 39-47; Colori: Moss, Slate",139.00,https://cdn.example-brand.com/nb-trail-042.jpg,Xebio JP,ja
NB-PACK-018,Northbound Daypack 22L,"Chiusura roll-top; tasca laptop; 420D ripstop","Volume 22 L; Peso 610 g; Colori: Sand, Black",89.00,https://cdn.example-brand.com/nb-pack-018.jpg,REI US,enIl prompt builder trasforma una riga in userInput. Mantienilo sotto qualche centinaio di parole e indica il pubblico e il numero di slide nel testo, poiché Fast PPT pianifica il deck dal brief.
function sellSheetPrompt(row) {
return [
`Sell sheet retailer per ${row.name} (SKU ${row.sku}), preparato per il team acquisti di ${row.target_retailer}.`,
`6 slide: copertina con nome prodotto e posizionamento in una riga; caratteristiche chiave; specifiche tecniche; prezzo e punti margine (prezzo retail ${row.price} EUR); merchandising e tempistiche lancio; contatti e prossimi passi.`,
`Caratteristiche: ${row.features}. Specifiche: ${row.specs}.`,
`Tono: fattuale, rivolto al buyer, senza superlativi di marketing.`,
].join("\n");
}
function launchPrompt(row) {
return [
`Launch deck prodotto per ${row.name} (SKU ${row.sku}).`,
`Pubblico: buyer retail e category manager.`,
`Copri la storia hero, le tre caratteristiche principali (${row.features}), la scheda tecnica (${row.specs}), prezzo retail ${row.price} EUR e la finestra della campagna stagionale.`,
`Usa l'immagine hero prodotto a ${row.hero_image_url} come ancora visiva dove opportuno.`,
].join("\n");
}Passo 2: Genera il sell sheet retailer con Fast PPT
Gli account manager hanno bisogno di un PPTX che possano aprire, modificare un prezzo e inoltrare. Questo è il percorso Fast PPT: POST /api/v1/slides/generate riempie uno dei 1.500+ template disegnati e restituisce un file PowerPoint nativo in circa 30 secondi. Scegli un themeId per brand e codificalo così ogni sell sheet condivide lo stesso sistema di layout. Se il tuo brand ha già un template approvato, On-brand AI slides with template fill spiega come standardizzarlo.

themeId fisso per brand.
Trova il tema una volta e memorizza l'ID nell'ambiente:
curl "https://2slides.com/api/v1/themes/search?query=retail%20product%20catalog&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"Poi genera. Il mode predefinito è sync, che restituisce downloadUrl in una chiamata. Per batch usa mode: "async" così la richiesta restituisce subito un jobId e lo script continua a inviare.
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Sell sheet retailer per Northbound Trail Runner 2 (SKU NB-TRAIL-042), preparato per il team acquisti di REI US. 6 slide: copertina; caratteristiche chiave (suola Vibram, drop 8 mm, tomaia mesh riciclato); specifiche tecniche (265 g, EU 39-47, Moss e Slate); prezzo e punti margine (retail 139.00); merchandising e tempistiche lancio; contatti e prossimi passi. Tono: fattuale, rivolto al buyer.",
"themeId": "YOUR_BRAND_THEME_ID",
"responseLanguage": "English",
"mode": "async"
}'Un sell sheet di 6 pagine costa 60 crediti, circa $0,15 al prezzo del pacchetto da $5.
Passo 3: Genera il launch deck campagna con create-like-this
Il launch deck è diverso. Buyer e canali social si aspettano che assomigli alla campagna, non a un template, e nessuno lo modificherà slide per slide. Questo è il percorso design a immagine: POST /api/v1/slides/create-like-this prende un referenceImageUrl, ricava un sistema di design (palette, tipo, composizione) da quell'immagine e rende ogni pagina come immagine dentro un PDF. Punta al key visual della stagione e ogni deck SKU eredita il look campagna. La pagina prodotto di Create Slides Like This mostra la stessa pipeline nello spazio web.

create-like-this è il punto di ingresso API; l'immagine di riferimento sostituisce un prompt scritto di stile.
Eseguilo due volte per SKU con valori aspectRatio diversi: "16:9" per il deck buyer e "4:5" per il carosello social. Le pipeline immagine usano di default mode: "async".
curl -X POST https://2slides.com/api/v1/slides/create-like-this \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Launch deck prodotto per Northbound Trail Runner 2 (SKU NB-TRAIL-042). Pubblico: buyer retail e category manager. Copri la storia hero, tre caratteristiche principali (suola Vibram, drop 8 mm, tomaia mesh riciclato), la scheda tecnica (265 g, EU 39-47), prezzo retail 139.00 e la finestra campagna FW26.",
"referenceImageUrl": "https://cdn.example-brand.com/campaigns/fw26/key-visual.jpg",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 8,
"contentDetail": "standard",
"imageModel": "gemini-3-pro-image",
"responseLanguage": "English",
"mode": "async"
}'Per la versione social cambia aspectRatio in "4:5" e page in 6, e accorcia il brief alla storia hero più tre caratteristiche. Un deck 2K di 8 pagine costa 10 + 800 = 810 crediti (circa $2,03); la versione 4:5 di 6 pagine costa 610 crediti (circa $1,53). page: 0 lascia scegliere il planner, ma un numero fisso mantiene i costi catalogo prevedibili.
Passo 4: Esegui il catalogo in batch a 6 richieste al minuto
Il rate limit è 6 richieste al minuto per chiave API, e GET /api/v1/jobs/{jobId} permette 10 al minuto. Un runner che rispetta entrambi è semplice: invia un job ogni 10 secondi, scrive il jobId accanto allo SKU su disco man mano, poi fa polling del set pendente in round-robin a un controllo ogni 6 secondi. Ogni file finito viene caricato su cloud storage appena il job ha successo.
// catalog-to-decks.mjs (Node 20, eseguito server-side; mai spedire SLIDES_API_KEY al browser)
import { readFile, writeFile } from "node:fs/promises";
import { parse } from "csv-parse/sync";
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const API = "https://2slides.com/api/v1";
const headers = {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.SLIDES_API_KEY}`,
};
const THEME_ID = process.env.BRAND_THEME_ID;
const KEY_VISUAL = "https://cdn.example-brand.com/campaigns/fw26/key-visual.jpg";
const s3 = new S3Client({ region: "eu-central-1" });
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const LANGUAGE = { en: "English", de: "German", ja: "Japanese" };
async function submit(path, body) {
const res = await fetch(`${API}${path}`, { method: "POST", headers, body: JSON.stringify(body) });
if (!res.ok) throw new Error(`${path} -> ${res.status} ${await res.text()}`);
return res.json(); // modalità async restituisce { jobId, ... }
}
// 1. Submit: una richiesta ogni 10 s resta sotto 6 richieste/min
const rows = parse(await readFile("catalog.csv", "utf8"), { columns: true });
const jobs = []; // { sku, market, kind, jobId }
for (const row of rows) {
const responseLanguage = LANGUAGE[row.market] ?? "Auto";
const sheet = await submit("/slides/generate", {
userInput: sellSheetPrompt(row),
themeId: THEME_ID,
responseLanguage,
mode: "async",
});
jobs.push({ sku: row.sku, market: row.market, kind: "sell-sheet", jobId: sheet.jobId });
await sleep(10_000);
for (const [aspectRatio, page, kind] of [["16:9", 8, "launch-16x9"], ["4:5", 6, "social-4x5"]]) {
const deck = await submit("/slides/create-like-this", {
userInput: launchPrompt(row),
referenceImageUrl: KEY_VISUAL,
aspectRatio,
resolution: "2K",
page,
contentDetail: "standard",
responseLanguage,
mode: "async",
});
jobs.push({ sku: row.sku, market: row.market, kind, jobId: deck.jobId });
await sleep(10_000);
}
// mappa jobId <-> SKU su disco, così un crash a metà non perde job pagati
await writeFile("jobs.json", JSON.stringify(jobs, null, 2));
}
// 2. Poll: jobs/{id} permette 10 richieste/min, quindi controlla un job ogni 6 s in round-robin
const pending = new Set(jobs.map((j) => j.jobId));
while (pending.size > 0) {
for (const job of jobs.filter((j) => pending.has(j.jobId))) {
const res = await fetch(`${API}/jobs/${job.jobId}`, { headers });
const state = await res.json(); // { status, progress, downloadUrl }
if (state.status === "success") {
pending.delete(job.jobId);
const file = await fetch(state.downloadUrl);
const ext = job.kind === "sell-sheet" ? "pptx" : "pdf";
await s3.send(new PutObjectCommand({
Bucket: "brand-sales-assets",
Key: `decks/${job.sku}/${job.market}/${job.kind}.${ext}`,
Body: Buffer.from(await file.arrayBuffer()),
}));
console.log(`caricato ${job.sku} ${job.market} ${job.kind}`);
} else if (state.status === "failed") {
pending.delete(job.jobId);
console.error(`fallito ${job.sku} ${job.kind}`, state);
}
await sleep(6_000);
}
}Tre job per SKU a 10 secondi di distanza significa che 100 SKU si inviano in 50 minuti; il polling di 300 job a un controllo ogni 6 secondi aggiunge circa 30 minuti per passata. Se preferisci Python, lo stesso loop è in Automate presentation generation with Python and the 2Slides API, e il pattern generale di coda è trattato in How to batch-generate presentations with an AI API.
Passo 5: Aggiungi varianti multilingua per retailer cross-border
Il cross-border è dove l'automazione ripaga. Un buyer tedesco e uno giapponese dovrebbero ricevere ciascuno un sell sheet nella propria lingua, con le stesse specifiche e lo stesso template brand. Non serve un servizio di traduzione: responseLanguage accetta un nome di lingua e il deck è scritto in quella lingua dallo stesso brief inglese.

generate e lingue di output supportate. Passa il nome della lingua, come "German", mai un codice come "de".
Lo script sopra mappa già market a un nome lingua (de a "German", ja a "Japanese"). I 20+ valori supportati includono spagnolo, francese, italiano, portoghese, polacco, coreano, cinese semplificato, cinese tradizionale, arabo e turco. Scrivi i prezzi nella valuta di mercato (EUR, JPY) e nomina il retailer nel brief così numeri e contesto sono localizzati, non solo le parole.
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Sell sheet retailer per Northbound Trail Runner 2 (SKU NB-TRAIL-042), preparato per il team acquisti di Xebio. 6 slide: copertina; caratteristiche chiave (suola Vibram, drop 8 mm, tomaia mesh riciclato); specifiche tecniche (265 g, taglie 25-30 cm, Moss e Slate); prezzo e punti margine (retail JPY 21,900); merchandising e tempistiche lancio; contatti e prossimi passi.",
"themeId": "YOUR_BRAND_THEME_ID",
"responseLanguage": "Japanese",
"mode": "async"
}'Ogni variante linguistica è un job separato allo stesso prezzo, quindi uno SKU venduto in tre mercati costa tre sell sheet: 180 crediti, circa $0,45.
Passo 6: Trigger su Shopify "Product created" con Make
Il batch runner gestisce i drop stagionali. Per un flusso costante di nuovi SKU, collega il negozio all'API così un deck esiste pochi minuti dopo la creazione prodotto. Make (vedi il Make help center) espone eventi prodotto Shopify direttamente; lo stesso schema funziona in Zapier o n8n.
- Trigger: evento Shopify "Watch products" per prodotto creato, o trigger Webhook alimentato dal webhook Shopify
products/create. - Trasformazione: nodo Code che rimuove HTML dal body prodotto, prende
variants[0].priceeimages[0].src, e costruisceuserInputcome insellSheetPrompt. - Nodo HTTP Request (1):
POST https://2slides.com/api/v1/slides/create-like-thiscon il corpo del Passo 3; headerAuthorization: Bearer <key>viene da variabile scenario, mai da dati prodotto. - Nodo Delay/Wait: 60 secondi.
- Nodo HTTP Request (2):
GET https://2slides.com/api/v1/jobs/{{jobId}}. Un Router controllastatus:successcontinua,pendingoprocessingtorna al Delay,failedmanda alert Slack. - Consegna: HTTP GET su
downloadUrl, nodo upload su Google Drive, Dropbox o S3 sotto cartella SKU, e riga sheet consku,jobId,statuse percorso storage.
Shopify può lanciare più eventi prodotto in burst (bulk import, sync app). Aggiungi qui la stessa spaziatura di 10 secondi, o instrada eventi in una coda e lascia che il runner del Passo 4 la svuoti, altrimenti un burst di 20 importazioni fallisce alla richiesta 7.
Scegliere uno stile di riferimento
create-like-this ha bisogno di un'immagine di riferimento. Il tuo key visual campagna è la scelta giusta quando l'obiettivo è la coerenza di campagna. Se stai ancora decidendo come dovrebbe essere un deck settore retail, la 2Slides Gallery ospita deck di riferimento reali che puoi studiare o passare come referenceImageUrl per prendere in prestito il loro sistema di design. Sono deck di riferimento, non output API.


referenceImageUrl dice al modello di riutilizzare griglia, palette e trattamento grafico.
Usa una singola immagine di riferimento per campagna e per aspect ratio. Cambiarla tra SKU produce 40 deck che ognuno sembra a posto ma non come una famiglia.
Quanto costa
I crediti sono pay-as-you-go: $5 comprano 2.000 crediti ($0,0025 per credito) e $80 comprano 40.000 ($0,002 per credito). I nuovi account partono con 500 crediti gratuiti, circa 8 sell sheet per un test.
| Volume | Per SKU | Crediti al mese | USD approssimativi |
|---|---|---|---|
| 20 SKU/mese: sell sheet 6 pagine + launch deck 16:9 8 pagine | 60 + 810 = 870 | 17.400 | $42,50 (un pacchetto da 20.000 crediti) |
| 20 SKU/mese: aggiungi un deck social 4:5 6 pagine | 870 + 610 = 1.480 | 29.600 | $60-$74 a seconda del pacchetto |
| 500 SKU/mese: sell sheet + launch deck 16:9 | 870 | 435.000 | circa $870 a $0,002 per credito |
| 500 SKU/mese: tutti e tre i deck | 1.480 | 740.000 | circa $1.480 a $0,002 per credito |
Solo i sell sheet sono economici: 500 sell sheet PPTX di 6 pagine costano 30.000 crediti, circa $60. I deck con design a immagine sono dove va il budget, quindi genera il launch deck una volta per SKU e il sell sheet una volta per SKU per mercato.
Per confronto, l'API di Gamma (vedi developers.gamma.app) offre automazione simile ma richiede un piano Pro per le chiavi API; le chiavi 2Slides funzionano su qualsiasi account. 2Slides è il nostro prodotto, quindi considera questo nel confronto.
Fast PPT o slide con design a immagine per questo caso d'uso?
| Necessità | Usa | Perché |
|---|---|---|
| L'account manager modifica prezzi, sostituisce una slide, inoltra a un buyer | Fast PPT generate | PPTX nativo, 10 crediti/pagina, themeId fisso per brand |
| Il deck deve corrispondere esattamente al key visual campagna | create-like-this | Sistema di design derivato da referenceImageUrl |
| Carosello social o formato verticale | create-like-this con aspectRatio "4:5" o "9:16" | PDF più immagini per pagina, pronto per la pubblicazione |
| Presentazione narrata prodotto o MP4 per listing marketplace | create-like-this poi generate-narration (210 crediti/pagina) | I job Fast PPT non possono essere narrati |
Errori comuni
- Superare il rate limit in un import bulk. 6 richieste/min per chiave vale per ogni endpoint di generazione. Spazia le submission di 10 secondi o mettile in coda; non usare
Promise.all. - Chiave API in tema Shopify o script storefront. Le chiavi devono vivere server-side (runner, connessione Make o funzione serverless); tutto nel browser è leggibile da chiunque.
- Aspettarsi di narrare un sell sheet Fast PPT.
generate-narrationaccetta solo job dacreate-pdf-slidesocreate-like-this. Se vuoi un video prodotto narrato, parti dal deck con design a immagine. - Passare
responseLanguage: "de". Il parametro prende un nome lingua: "German", "Japanese", "Spanish". I codici non sono riconosciuti. - Inserire l'intero record PIM in
userInput. Liste lunghe di attributi producono slide confuse. Riassumi prima a caratteristiche e specifiche rilevanti per il buyer; le colonne CSV del Passo 1 sono il filtro. - Lasciare che il planner scelga il numero di pagine per un run catalogo.
page: 0va bene per un one-off, ma unpagefisso mantiene il costo credito per SKU identico per budget.
Domande Frequenti
Posso generare deck prodotto direttamente da un export CSV Shopify?
Sì. Il CSV prodotto Shopify contiene titolo, body, prezzo variante e URL immagine necessari; il builder del Passo 1 mappa quelle colonne in userInput. Aggiungi colonne target_retailer e market, o derivale dai tag. Il runner poi chiama generate per il sell sheet PPTX e create-like-this per il launch deck, una riga alla volta.
Come mantengo centinaia di launch deck on brand?
Passa lo stesso key visual campagna come referenceImageUrl a ogni chiamata create-like-this, e tieni un riferimento per aspect ratio. Il sistema di design è derivato da quell'immagine, quindi i deck condividono palette, tipo e composizione. Per il sell sheet modificabile, codifica un themeId per brand così ogni PPTX viene dallo stesso template.
Quanto tempo richiede un run di 100 SKU?
Il collo di bottiglia è l'invio: a 6 richieste al minuto, tre deck per SKU significa uno SKU ogni 30 secondi, quindi 100 SKU si inviano in circa 50 minuti. I job Fast PPT finiscono in circa 30 secondi ciascuno; i deck con design a immagine completano in background mentre continui a inviare. Il polling a 10 richieste al minuto aggiunge circa 30 minuti per passata.
Quanto costa un singolo SKU in crediti?
Un sell sheet Fast PPT di 6 pagine costa 60 crediti (circa $0,15). Un launch deck 2K di 8 pagine con design a immagine costa 10 crediti di pianificazione più 800 di pagina, 810 in totale (circa $2,03). Un deck social 4:5 di 6 pagine costa 610 crediti. Tutti e tre insieme sono 1.480 crediti, circa $2,96 al prezzo del pacchetto da $80 ($0,002 per credito).
Lo stesso script può produrre deck in tedesco e giapponese?
Sì. Imposta responseLanguage su "German" o "Japanese" nello stesso corpo richiesta e il deck viene scritto in quella lingua dal tuo brief inglese. Ogni variante linguistica è un job separato allo stesso costo in crediti. Metti prezzi specifici per mercato e nome retailer nel brief così numeri e contesto sono localizzati oltre al testo.
Prossimi passi
- Ottieni una chiave API su 2slides.com/api. I nuovi account includono 500 crediti gratuiti, sufficienti per testare template e prompt su qualche sell sheet.
- Vedi come altri team usano gli stessi endpoint nel post hub AI presentation API use cases by team.
- Leggi How marketing teams produce AI presentation decks at scale per la visione lato campagna dell'automazione da catalogo prodotto a presentazione, poi esegui un pilota da 5 SKU prima del primo run catalogo completo.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free