API PriceZag — Collega i dati sui prezzi ai tuoi sistemi
Usa l'API JSON di PriceZag per consultare prezzi e disponibilità dei concorrenti, gestire prodotti e regole di repricing, scaricare report e automatizzare i tuoi flussi di lavoro.
Esempio rapido con curl
MYAPIKEY con la chiave API del tuo account (vedi Chiave API).Crea un prodotto di prova:
curl -vX POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"productCreate","code":"000-SOME-TEST-PRODUCT","name":"Some Test Product created via PriceZag API","price":12.34,"currency":"USD"}]}'
(se esegui di nuovo il comando, riceverai un errore perché il prodotto esiste già)Ora puoi recuperare i dati del prodotto:
curl -X POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"productGet","code":"000-SOME-TEST-PRODUCT"}]}' | python -mjson.tool
(rimuovi | python -mjson.tool se non hai installato questo strumento per formattare la risposta JSON nel terminale)Panoramica
Cosa puoi fare con l'API PriceZag
L'API JSON di PriceZag permette ai tuoi script e sistemi aziendali di utilizzare direttamente i prezzi e le disponibilità dei concorrenti che monitoriamo. Puoi consultare i dati dei prodotti, gestire prodotti e categorie, calcolare importi in base alle regole di repricing, configurare avvisi e scaricare fogli di calcolo personalizzati. Puoi usare l'API con qualsiasi piattaforma ecommerce o linguaggio di programmazione in grado di inviare richieste HTTPS ed elaborare JSON.
Puoi anche chiedere al tuo assistente AI preferito di scrivere gli script per te. Forniscigli l'URL di questa documentazione (https://pricezag.com/integrations/api), spiega cosa vuoi automatizzare e indica il linguaggio di programmazione o la piattaforma ecommerce che utilizzi. Tieni privata la chiave API: non inserirla nelle conversazioni con l'AI.
PriceZag si occupa già del monitoraggio nella propria piattaforma, quindi l'API è facoltativa. È utile quando vuoi collegare i tuoi sistemi a questi dati. Shopify e WooCommerce offrono anche integrazioni dirette.
Chiave API e autorizzazioni
Nel tuo account PriceZag, apri Automation > API. Fai clic su Reveal the current API key per visualizzare la chiave attuale oppure su Change the API key per sostituirla. Entrambe le operazioni richiedono la password dell'account. Il tuo utente deve avere le autorizzazioni necessarie per visualizzare o generare chiavi API. Se non le possiede, deve rivolgersi a un amministratore dell'account.
Mantieni segreta la chiave API. Può consentire modifiche estese ai dati dell'account, comprese le eliminazioni. Non inserirla in repository pubblici, nel codice eseguito dal browser o nelle conversazioni con l'AI. Se qualcuno ti aiuta a sviluppare un'integrazione, crea per lui un utente PriceZag con le autorizzazioni necessarie e cambia la chiave API quando opportuno.
L'accesso all'API dipende dal tuo abbonamento. Con l'accesso completo, gli script possono operare su tutti i prodotti. Altrimenti, l'API può accedere solo ai primi 10 prodotti in ordine alfanumerico per codice di riferimento. Per esempio, se hai 1.000 prodotti con codici da SKU0001 a SKU1000, l'API può accedere ai prodotti da SKU0001 a SKU0010. La prova gratuita di 14 giorni include l'accesso completo all'API. Puoi anche attivare l'accesso completo come opzione del tuo abbonamento.
Registro delle attività API e ultima richiesta
La pagina Automation > API del tuo account mostra l'ora dell'ultima richiesta API e il pulsante API Activity Log. Controllali se uno script non funziona: puoi verificare se le richieste hanno raggiunto PriceZag e individuare chiamate non riuscite o modifiche inattese.
Le modifiche effettuate tramite API compaiono anche in History of Edits in tutto l'account, con il nome utente API. Per esempio, nella cronologia di un prodotto potrebbe apparire Price edited by API anziché Price edited by JOHN. PriceZag supporta più utenti nello stesso account, così puoi distinguere le modifiche automatiche da quelle effettuate dai singoli membri del team.
URL e metodi delle richieste
Tutte le richieste API utilizzano lo stesso URL HTTPS. Invia richieste POST a questo indirizzo, sostituendo MYAPIKEY con la tua chiave:
https://pricezag.com/api/v3/MYAPIKEY
Le operazioni da eseguire con l'API (le "actions") e i relativi parametri devono trovarsi nel corpo JSON della richiesta, non nell'URL.
Invia nel corpo della richiesta POST un oggetto JSON contenente una o più azioni. L'URL rimane identico sia che tu consulti un prodotto, aggiorni i prezzi o scarichi un foglio di calcolo.
Non puoi inviare richieste POST?
Come ultima risorsa puoi effettuare una richiesta GET con il corpo JSON codificato in base64 nel parametro URL ?data=. Gli URL hanno limiti di lunghezza, quindi è decisamente preferibile utilizzare POST.
Come funzionano le azioni
La nostra API e l'interfaccia utente (UI) utilizzano le stesse funzioni nel backend, quindi quasi tutte le operazioni disponibili nell'interfaccia possono essere eseguite anche tramite API.
Quando invii una richiesta API, i dati JSON contengono un array di tutte le azioni da eseguire, da 1 a un massimo di 1.000 per richiesta. Per esempio, puoi rinominare 3 prodotti e creare una nuova categoria con un'unica richiesta di 4 azioni. Oppure puoi recuperare i dati di 1.000 prodotti in una sola richiesta con 1.000 azioni "productGet".
Le azioni vengono eseguite nell'ordine in cui compaiono nell'array. Se crei una nuova regola di repricing e poi vi assegni dei prodotti, devi rispettare quest'ordine affinché la regola esista quando vengono modificati i prodotti.
Scorri verso il basso per consultare l'elenco di tutte le azioni disponibili.
Il tuo oggetto di richiesta JSON
Per script e codice generato dall'AI: Gli esempi di riferimento riportati di seguito includono // commenti e ... segnaposto per spiegare i campi. Sono esempi illustrativi, non JSON valido da inviare senza modifiche. Prima di effettuare una richiesta, rimuovi i commenti e sostituisci i segnaposto. I due esempi curl precedenti contengono invece corpi JSON validi.
{
"stopOnFailure" : 1, // (facoltativo) Di norma il backend prosegue con l'azione successiva anche dopo un errore. Imposta 1 per interrompere l'esecuzione.
// Array di tutte le azioni:
"actions" : [
// Azione 1:
{
"a" : "someActionName", // Il nome dell'azione è sempre indicato nel campo "a" di ogni oggetto.
"xx" : "some parameter this action needs" // Gli altri campi dipendono dai parametri richiesti dall'azione.
},
// Azione 2:
{
"a" : "anotherActionName",
"abc" : "some parameter this action needs",
"xyz" : {"x":"some object this action needs", "y":5, "z":6}
},
// Azione 3:
{
"a" : "aThirdAction",
"xyz" : ["some array this action needs", "..."]
}
]
}
Risposta del server e codici di stato HTTP
Se la richiesta è corretta, normalmente riceverai un oggetto JSON come risposta, salvo poche azioni espressamente indicate come eccezioni (per esempio il download di un foglio di calcolo). Puoi riconoscerlo dall'intestazione di risposta Content-Type: application/json.
Il codice di risposta HTTP è:
► 200 quando tutte le azioni sono riuscite (anche l'esito neutro ok=0 è considerato un successo)
► 406 quando alcune azioni sono riuscite e altre non sono riuscite.
► 422 quando tutte le azioni non sono riuscite, ma non per i motivi elencati di seguito.
► 400 quando l'oggetto JSON ricevuto non può essere decodificato.
► 403 quando l'autenticazione non riesce (di solito perché la chiave API è errata).
Per semplificare gli script, puoi basarti direttamente su questi codici di risposta. Se servono maggiori dettagli, l'oggetto JSON restituito contiene ulteriori informazioni:
{
"ok" : 15, // Numero di azioni eseguite correttamente (azione ok>0).
"errors" : 0, // Numero di azioni che hanno restituito un errore (azione ok<0).
"actionsCount" : 20, // Numero totale di azioni inizialmente richieste (lunghezza dell'array "actions").
// NOTA: questo significa che 5 azioni hanno restituito ok=0 (nessun errore, ma nessuna modifica).
// Array di tutte le azioni inizialmente richieste (nello stesso ordine):
"actions" : [
...
// Oggetto di risposta di ogni azione:
{
"a" : "someActionName",
"ok" : 4, // Risultato: >0 = successo, 0 = nessuna modifica, <0 = errore.
// Per esempio, 0 può essere restituito quando imposti un prezzo già uguale a quello corrente.
// -1 può indicare che il prodotto non esiste.
// Il significato di >0 dipende dall'azione; spesso indica il numero di campi o elementi effettivamente modificati.
"error" : "...", // Messaggio di errore, se ok < 0.
// I nostri messaggi di errore sono sempre dettagliati. Ti consigliamo di registrarli,
// perché contengono le informazioni necessarie per capire cosa non ha funzionato.
... // Altri dati specifici restituiti dall'azione.
},
...
]
}
Esempi?
Limiti di richieste e pianificazione
Per evitare che questo accada alle tue richieste legittime:
► Non usare mai una chiave API errata: il firewall tollera pochissimi tentativi con chiavi non valide (come accade con le password errate sul sito).
► Raggruppa molte azioni in un unico oggetto JSON e invia una sola richiesta (massimo 1.000 azioni). Per creare 1.000 prodotti, invia una richiesta anziché 1.000.
► Se devi effettuare molte richieste, attendi 500 ms tra una richiesta e l'altra e riutilizza la stessa connessione HTTPS. Aprire una nuova connessione per ogni richiesta è un errore comune. Un numero elevato di richieste è giustificato soprattutto quando devi aggiornare centinaia di migliaia di prodotti, con 1.000 azioni per richiesta.
Non imponiamo un limite fisso alla frequenza delle richieste: il firewall decide in base a decine di parametri. La soluzione migliore è usare il buon senso.
Richieste programmate:
Se pianifichi richieste a intervalli regolari, aggiungi un ritardo casuale per evitare di inviarle sempre al secondo 0 di ogni minuto. Molti clienti effettuano richieste nello stesso istante: distribuirle nel tempo può accelerare le risposte e ridurre il rischio di timeout quando i server sono molto occupati.
Tutte le azioni API disponibili
Ogni azione è documentata di seguito con i parametri ed esempi di richieste e risposte. Il menu a sinistra permette di raggiungerla direttamente.
Prodotti
| Azione | Funzione |
|---|---|
| productCreate | Crea un nuovo prodotto |
| productEdit | Modifica un prodotto esistente |
| productCompetitors | Modifica gli URL dei concorrenti di un prodotto (senza doverli sovrascrivere tutti) |
| productCategories | Modifica le categorie di uno o più prodotti (senza doverli sovrascrivere tutti) |
| productRepricing | Assegna molti prodotti a una regola di repricing |
| productDelete | Elimina uno o più prodotti |
| productGet | Recupera un prodotto (e i dati dei relativi concorrenti) |
| productGetAll | Recupera tutti i prodotti (e i dati dei relativi concorrenti) |
Categorie
| Azione | Funzione |
|---|---|
| categoryCreate | Crea una nuova categoria |
| categoryEdit | Modifica una categoria esistente |
| categoryDelete | Elimina una o più categorie |
| categoryCopy | Copia o sposta prodotti tra categorie |
| categoryGet | Recupera una categoria |
| categoryGetAll | Recupera tutte le categorie |
Avvisi
| Azione | Funzione |
|---|---|
| alertRecipientCreate | Crea un nuovo destinatario degli avvisi |
| alertRecipientEdit | Modifica un destinatario e/o le relative regole degli avvisi |
| alertRecipientDelete | Elimina un destinatario degli avvisi |
| alertRuleEdit | Modifica una regola degli avvisi esistente per un destinatario |
| alertRuleCreate ? | Questa azione non esiste. Usa invece alertRecipientEdit con un array "rulesAdd" |
| alertRuleDelete ? | Questa azione non esiste. Usa invece alertRecipientEdit con un array "rulesRemove" |
| alertGetAll | Recupera tutti i destinatari degli avvisi e le relative regole |
Regole di repricing
| Azione | Funzione |
|---|---|
| repricingCreate | Crea una nuova regola di repricing |
| repricingEdit | Modifica una regola di repricing esistente |
| repricingDelete | Elimina una regola di repricing |
| repricingGetAll | Recupera tutte le regole di repricing |
Fogli di calcolo
| Azione | Funzione |
|---|---|
| spreadsheetDownload | Scarica un foglio di calcolo |
| spreadsheetPresetEdit | Rinomina o elimina un modello preimpostato di esportazione |
| spreadsheetAutoCreate | Crea una nuova esportazione automatica di fogli di calcolo |
| spreadsheetAutoEdit | Modifica un'esportazione automatica di fogli di calcolo |
Concorrenti e altre funzioni
| Azione | Funzione |
|---|---|
| competitorDeleteAll | Elimina un concorrente da tutti i prodotti o dalle categorie |
| mathEdit | Imposta o modifica i calcoli di prezzo per un dominio concorrente |
Prodotti
productCreate - Crea un nuovo prodotto
{ "actions" : [
...
{
"a" : "productCreate",
"code" : "UNIQUE-REF-CODE", // Da 1 a 80 caratteri ([a-z\d][a-z\d_-]{0,78}[a-z\d]); non distingue maiuscole e minuscole (conversione in maiuscolo).
"name" : "The Product Name", // Da 1 a 200 caratteri.
"price" : 1234.90, // Attenzione a virgole e punti: nessun separatore delle migliaia; usare il punto come separatore decimale.
"currency" : "USD",
"cost" : 1234.90, // (facoltativo)
"costCurrency" : "USD", // Obbligatorio se viene fornito cost.
"repricingRule" : "The Rule Name", // (facoltativo) Regola di repricing assegnata (stringa vuota = disattivata; regola inesistente = errore).
"myWebsite" : "https://...", // (facoltativo) URL oppure shopify:productId:variantId o woocommerce:productId(:variationId).
"competitors" : ["https://...", "https://..."], // (facoltativo)
"categories" : ["The Category 1", "The Category 2"], // (facoltativo) Categorie del prodotto (quelle inesistenti vengono create).
"comments" : "Some comments\nAnd another line", // (facoltativo) Massimo 1.000 caratteri UTF-8.
"custom_someFieldName1" : "Value of custom field", // (facoltativo)
"custom_someFieldName2" : "Value of other\nCustom\tField", // (facoltativo)
// I campi personalizzati sono per il tuo uso interno. Puoi utilizzarli in varie parti dell'account, per esempio come colonne nelle esportazioni di fogli di calcolo.
// Ogni prodotto può avere al massimo 20 campi personalizzati. Il nome ammette fino a 40 lettere, cifre o trattini bassi (distingue maiuscole e minuscole), escluso il prefisso "custom_" (47 caratteri in totale).
// Il valore può contenere al massimo 500 byte (in genere caratteri di qualsiasi tipo). Puoi impostare un valore numerico (custom_varname:123),
// ma l'API lo restituisce sempre come stringa (custom_varname:"123"), quindi convertilo quando necessario.
// Per eliminare un campo personalizzato, imposta il valore a "": verrà rimosso completamente. Questa operazione si applica a productEdit, non a productCreate.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productCreate",
"ok" : 1,
"code" : "REF-CODE", // Codice finale salvato nel database (alcuni caratteri speciali potrebbero essere convertiti).
},
...
]
}
productEdit - Modifica un prodotto esistente
{ "actions" : [
...
{
"a" : "productEdit",
"code" : "REF-CODE",
... // Accetta gli stessi parametri di productCreate, tutti facoltativi.
"newCode" : "REF-CODE-RENAMED", // (facoltativo)
"competitors" : ["https://...", "https://..."], // Se specificato, SOVRASCRIVE tutti gli URL dei concorrenti esistenti.
// Per aggiungere o rimuovere singoli concorrenti senza sostituire l'elenco esistente, usa l'azione productCompetitors.
"categories" : ["The Category 1", "The Category 2"], // Se specificato, SOVRASCRIVE tutte le categorie attuali. Usa invece productCategories o categoryEdit.
"custom_someFieldName" : "New value or empty to delete that custom field",
// Ricorda che ogni prodotto può avere al massimo 20 campi personalizzati; per aggiungerne altri potrebbe essere necessario eliminarne alcuni impostandone il valore a "".
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productEdit",
"ok" : 3, // Numero di modifiche effettuate (per esempio, il mio prezzo + 2 URL di concorrenti = 3).
"code" : "REF-CODE", // Codice finale (nuovo) nel database (potremmo convertire alcuni caratteri speciali).
},
...
]
}
productCompetitors - Modifica gli URL dei concorrenti di un prodotto
{ "actions" : [
...
{
"a" : "productCompetitors",
"code" : "REF-CODE",
"competitorsAdd" : ["https://...", "https://..."], // (facoltativo) Aggiungi questi URL ai concorrenti già presenti.
"competitorsRemove" : ["https://...", "example.com/a0ff80...5f00", "example.net"], // (facoltativo) Rimuovi questi concorrenti. Ogni elemento può essere:
// > L'URL, compresi eventuali modificatori con hashtag. Le etichette sono facoltative, se presenti.
// > Il riferimento "ref" del concorrente (restituito dalle altre azioni: dominio principale seguito da un hash MD5 di 32 caratteri).
// > Il dominio principale o il nome host completo: verranno rimossi dal prodotto tutti gli URL di quel dominio.
// NOTA: "competitorsAdd" e "competitorsRemove" possono essere stringhe anziché array con un solo elemento.
// La rimozione precede l'aggiunta: puoi eliminare un intero dominio e poi aggiungere un URL dello stesso dominio.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productCompetitors",
"ok" : 3, // Numero di URL di concorrenti modificati.
"competitorsAdded" : 2, // Numero di URL di concorrenti aggiunti al prodotto.
"competitorsRemoved" : 1, // Numero di URL di concorrenti rimossi dal prodotto.
// ERRORI:
// > Aggiungere un URL già presente NON genera un errore (ok = 0).
// > Rimuovere un URL completo o un riferimento "ref" NON presente genera un errore (ok = -1).
// > Rimuovere tutti gli URL di un dominio NON presente NON genera un errore (ok = 0).
},
...
]
}
productCategories - Modifica le categorie di uno o più prodotti
È la stessa funzione utilizzata dall'interfaccia quando apri All Products, selezioni uno o più prodotti e fai clic su Selected Products > Edit Categories. Puoi consultare questa sezione dell'interfaccia per una spiegazione più dettagliata.
Ti consigliamo di consultare anche l'azione categoryEdit per scegliere quella più adatta.
{ "actions" : [
...
{
"a" : "productCategories",
"code" : "REF-CODE", // Non distingue maiuscole e minuscole (stringa), OPPURE:
"code" : ["REF-CODE-1", "REF-CODE-2"], // Può anche essere un array con più prodotti (limite 100.000).
"categoriesRemove" : ["The Category 1", "The Category 2"], // (facoltativo) Rimuovi prima da queste categorie.
"categoriesRemoveAll" : 1, // (facoltativo) Rimuovi prima da tutte le categorie (come productEdit).
"deleteEmptyCategories" : 1, // Con questa opzione, ogni categoria che diventa vuota
// dopo la rimozione dei prodotti verrà eliminata.
"categoriesAdd" : ["The Category 1", "The Category 2"], // (facoltativo) Aggiungi quindi a queste categorie (quelle inesistenti vengono create).
"categoriesAddClear" : 1, // (facoltativo) Svuota prima le categorie alle quali aggiungi i prodotti.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productCategories",
"ok" : 3, // Numero di prodotti modificati.
},
...
]
}
productRepricing - Assegna molti prodotti a una regola di repricing
Questa operazione è equivalente all'azione productEdit, ma poiché ogni richiesta è limitata a 1.000 azioni, per assegnare 50.000 prodotti a una regola specifica ti servirebbero 50 richieste, con tempi di esecuzione molto più lunghi.
Se devi modificare solo pochi prodotti, puoi usare l'azione productEdit.
{ "actions" : [
...
{
"a" : "productRepricing",
"repricingRule" : "The Rule Name", // Non distingue maiuscole e minuscole; "" (stringa vuota ma presente) significa nessuna regola (repricing disattivato).
"products" : ["REF-CODE-1", "REF-CODE-2"], // Non distingue maiuscole e minuscole (limite 100.000).
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productRepricing",
"ok" : 10, // Numero di prodotti modificati.
// Se tutti i prodotti erano già assegnati alla regola, otterrai ok=0.
},
...
]
}
productDelete - Elimina uno o più prodotti
È la stessa funzione utilizzata dall'interfaccia quando apri All Products, selezioni uno o più prodotti e fai clic su Selected Products > Delete.
{ "actions" : [
...
{
"a" : "productDelete",
"code" : "REF-CODE", // Non distingue maiuscole e minuscole (stringa), OPPURE:
"code" : ["REF-CODE-1", "REF-CODE-2"], // Può anche essere un array per eliminare più prodotti (limite 100.000).
"deleteEmptyCategories" : 1, // Con questa opzione, ogni categoria che diventa vuota
// che diventano vuote dopo l'eliminazione dei prodotti verranno eliminate a loro volta.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productDelete",
"ok" : 2, // Numero di prodotti eliminati correttamente.
},
...
]
}
productGet - Recupera un prodotto
{ "actions" : [
...
{
"a" : "productGet",
"code" : "REF-CODE", // Non distingue maiuscole e minuscole.
"currency" : "EUR", // (facoltativo) Converti tutti gli importi in questa valuta anziché nella valuta del prezzo del prodotto.
"withStats" : 1, // (facoltativo) Restituisci l'oggetto con le statistiche.
"noCompetitors" : 1, // (facoltativo) Non restituire l'array dei concorrenti (per ridurre i dati).
"noComments" : 1, // (facoltativo) Non restituire i commenti (...).
"withScreenshots" : 1, // (facoltativo) Restituisci l'URL dell'ultima immagine acquisita per ciascun concorrente.
"sickMax" : 2, // (facoltativo, predefinito 1) Valori da 0 a 3: restituisci solo gli URL con livello di errore fino a N.
},
...
] }
Restituisce tutte le informazioni su un prodotto, compresi il prezzo e la disponibilità attuali dei concorrenti.RISPOSTA:
{
...
"actions" : [
...
{
"a" : "productGet",
"ok" : 1,
"code" : "REF-CODE",
"name" : "The Product Name",
"price" : 1234.90, // Il tuo prezzo, sempre nella valuta originale.
"currency" : "USD", // Valuta originale di "price".
"convCurrency" : "EUR", // Valuta in cui sono visualizzati gli importi convertiti (la "currency" fornita oppure la valuta originale del prodotto).
"priceConv" : 1234.90, // Il tuo prezzo convertito in "convCurrency", oppure identico a "price".
"cost" : 1234.90,
"costCurrency" : "USD",
"costPriceConv" : 1234.90, // Il tuo costo convertito nella "currency" del prezzo.
"costConv" : 1234.90, // Il tuo costo convertito in "convCurrency".
"margin" : 10.5, // Percentuale (può essere negativa).
"repricingRule" : "The Rule Name", // Queste 3 variabili di repricing sono ASSENTI se non è configurato alcun repricing.
"reprice" : 1234.90, // Importo di repricing attuale calcolato in base a repricingRule.
"repriceCurrency" : "USD", // Identico a "convCurrency", riportato qui per chiarezza.
"myWebsite" : "https://...",
"created" : 1234567890, // Timestamp Epoch di creazione del prodotto.
"createdBy" : "SOMEUSER", // Nome utente oppure "API".
"edited" : 1234567890, // Timestamp Epoch dell'ultima modifica, se presente.
"editedBy" : "SOMEUSER", // Nome utente oppure "API".
"comments" : "Some comments\nAnd another line",
"commentsLast" : 1234567890, // Timestamp Epoch dell'ultima modifica ai commenti, se presente.
"commentsLastBy" : "SOMEUSER", // Nome utente oppure "API".
"categories" : ["The Category 1", "The Category 2"],
"stats" : {
// Le statistiche includono solo gli URL con livello di errore 0 o 1, indipendentemente dal valore di "sickMax".
// Tutti gli importi sono in "convCurrency": la "currency" specificata oppure la valuta originale del prodotto.
// ATTENZIONE: quando un importo non è disponibile (per esempio compIn* senza concorrenti con scorte), il valore è 0.
"rank" : 1.23, // La tua posizione per prezzo (1 = nessuno ha un prezzo inferiore al tuo).
"rankIn" : 1.23, // La tua posizione tra i concorrenti con scorte disponibili.
"compCount" : 3, // Numero di concorrenti con un prezzo valido.
"compInCount" : 3, // Numero di concorrenti con scorte disponibili ...
"compOutCount" : 3, // Numero di concorrenti senza scorte ...
"compAvg" : 123.56, // Media di tutti i concorrenti.
"compAvgVsMe" : 123.56, // Differenza (in convCurrency) tra il tuo prezzo e la media dei concorrenti (negativa = il tuo prezzo è inferiore).
"compInAvg" : 123.56, // Media dei concorrenti con scorte disponibili.
"compInAvgVsMe" : 123.56, // Come "compAvgVsMe", ma solo per i concorrenti con scorte disponibili.
"compLowest" : 123.56, // Concorrente con il prezzo più basso.
"compLowestVsMe" : 123.56, // Come "compAvgVsMe", ma rispetto al prezzo minimo anziché alla media.
"compInLowest" : 123.56, // Concorrente con il prezzo più basso e scorte disponibili.
"compInLowestVsMe" : 123.56, // Come "compInAvgVsMe", ma ...
"compHighest" : 123.56, // Concorrente con il prezzo più alto.
"compHighestVsMe" : 123.56, // Come "compAvgVsMe", ma ...
"compInHighest" : 123.56, // Concorrente con il prezzo più alto e scorte disponibili.
"compInHighestVsMe" : 123.56, // Come "compInAvgVsMe", ma ...
},
"competitors" : [
// Array dei concorrenti (dal più economico), ciascuno rappresentato da un oggetto:
...
{
"url" : "https://...", // Include eventuali modificatori con hashtag aggiunti all'URL.
"ref" : "example.com/123abc...def",
// Riferimento URL (dominio principale seguito da un hash MD5 di 32 caratteri). È così che identifichiamo internamente gli URL.
"domain" : "example.com", // Dominio principale di questo concorrente.
"price" : 1234.90, // Ultimo importo rilevato sul sito (dopo eventuali calcoli configurati).
"currency" : "USD", // Valuta rilevata sul sito.
"priceConv" : 1234.90, // Prezzo convertito in "convCurrency".
"stock" : "5", // Disponibilità (stringa): "A" = disponibile, "2" = 2 unità in magazzino, "0" = esaurito, "" = sconosciuto.
"salesWk" : 123, // Vendite stimate alla settimana (se disponibili; vedi l'icona con punto interrogativo nella pagina del prodotto).
"screenshotURL" : "https://pricezag.com/.../screenshot.png",
// Se "withScreenshots" è attivo, URL dell'ultima schermata acquisita (nessun accesso richiesto: il lungo URL è pubblico).
"confidence" : 98,
// Percentuale di affidabilità nell'individuazione del prezzo corretto (vedi (?) nella pagina di un prodotto).
// Sotto il 70% (configurabile) il prezzo viene contrassegnato come "inaffidabile" con un punto interrogativo.
// Questo è indipendente dal livello di errore: un URL può avere problemi anche se il prezzo rilevato era corretto,
// oppure essere raggiungibile, ma con un prezzo che potremmo non aver identificato correttamente.
"sick" : 0, // Livello di errore dell'URL da 0 a 3.
// 0: ultima scansione riuscita (pagina raggiunta e prezzo trovato).
// 1: ultima scansione non riuscita, ma scansioni recenti riuscite (situazione normale).
// 2: nessun prezzo valido rilevato da diversi giorni.
// 3: nessun prezzo valido rilevato da diverse settimane.
// NOTA: i campi "price" e "priceConv" sono presenti solo per URL con livello di errore massimo 1. Con livello 2 o 3 non viene restituito alcun prezzo.
},
...
],
"custom" : {
// Questi sono i tuoi campi personalizzati. Se non ne conosci il funzionamento, apri
// la pagina di un prodotto nell'interfaccia e fai clic sull'icona (?) accanto a CUSTOM FIELDS.
// Se non ci sono campi personalizzati, l'intero oggetto "custom" è assente.
"variable_1" : "value 1", // I valori sono sempre stringhe, anche quando rappresentano numeri,
"variable_2" : "value 2", // e non esistono valori vuoti: impostarli avrebbe eliminato la variabile.
...
}
},
...
]
}
productGetAll - Recupera tutti i prodotti
{ "actions" : [
...
{
"a" : "productGetAll",
"currency" : "EUR", // (facoltativo) Converti tutti gli importi in questa valuta anziché nella valuta del prezzo di ogni prodotto.
"withStats" : 1, // (facoltativo) Restituisci l'oggetto con le statistiche.
"noCompetitors" : 1, // (facoltativo) Non restituire l'array dei concorrenti (per ridurre i dati).
"noComments" : 1, // (facoltativo) Non restituire i commenti (...).
"withScreenshots" : 1, // (facoltativo) Restituisci l'URL dell'ultima immagine acquisita per ciascun concorrente.
"sickMax" : 2, // (facoltativo, predefinito 1) Valori da 0 a 3: restituisci solo gli URL con livello di errore fino a N.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "productGetAll",
"ok" : 10, // Numero totale di prodotti.
"products" : [ // Array dei prodotti (ordine alfanumerico per codice), ciascuno rappresentato da un oggetto:
...
{ ... }, // Oggetto prodotto come nella risposta di productGet (qui sopra).
...
],
},
...
]
}
Potrebbe esserti utile anche l'azione categoryGet.Categorie
categoryCreate - Crea una nuova categoria
A differenza di altre azioni che accettano sia categorie esistenti sia nuove (come productCreate), questa azione restituisce un errore se la categoria esiste già.
{ "actions" : [
...
{
"a" : "categoryCreate",
"name" : "The New Category Name",
"name" : ["New Category 1", "New Category 2"], // Può anche essere un array.
"products" : ["REF-CODE-1", "REF-CODE-2"], // (facoltativo) Inserisci questi prodotti nelle categorie al momento della creazione.
"comments" : "Some comments\nAnd another line", // (facoltativo) Massimo 1.000 caratteri UTF-8.
},
...
] }
categoryEdit - Modifica una categoria esistente
{ "actions" : [
...
{
"a" : "categoryEdit",
"name" : "The Category Name", // Non distingue maiuscole e minuscole.
"newName" : "The Category Renamed", // (facoltativo)
"products" : ["REF-CODE-1", "REF-CODE-2"], // (facoltativo) Sovrascrivi l'elenco dei prodotti.
"productsAdd" : ["REF-CODE-1", "REF-CODE-2"], // (facoltativo) Aggiungi questi prodotti alla categoria.
"productsRemove" : ["REF-CODE-3", "REF-CODE-4"], // (facoltativo) Rimuovi questi prodotti dalla categoria (NON li elimina).
"comments" : "To overwrite the comments.", // (facoltativo) Massimo 1.000 caratteri UTF-8.
},
...
] }
I campi "products", "productsAdd" e "productsRemove" svolgono tutti la stessa funzione: modificano l'appartenenza dei prodotti alla categoria, ma in modi diversi. Per rimuovere tutti i prodotti dalla categoria, usa semplicemente "products" : []RISPOSTA:
{
...
"actions" : [
...
{
"a" : "categoryEdit",
"ok" : 5, // Numero di modifiche effettuate.
// Rinominare, modificare i commenti e aggiungere/rimuovere ogni prodotto conta ciascuno come una modifica.
"name" : "The Category Name", // Nuovo nome, se rinominata, altrimenti il nome precedente.
"productsCount" : 30, // Nuovo numero di prodotti nella categoria (anche se invariato).
"productsAdded" : 2, // Numero di prodotti aggiunti alla categoria.
"productsRemoved" : 2, // Numero di prodotti rimossi dalla categoria.
},
...
]
}
categoryDelete - Elimina una o più categorie
{ "actions" : [
...
{
"a" : "categoryDelete",
"name" : "The Category Name", // Non distingue maiuscole e minuscole (stringa), OPPURE:
"name" : ["Category 1", "Category 2"], // Può anche essere un array per eliminare più categorie (massimo 1.000).
"deleteProducts" : 1,
// Per impostazione predefinita, eliminando una categoria, i prodotti vengono soltanto rimossi da essa,
// ma con deleteProducts tutti i prodotti della categoria vengono eliminati senza conferma,
// insieme ai loro URL dei concorrenti, senza possibilità di recuperarli!
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "categoryDelete",
"ok" : 2, // Numero di categorie eliminate.
"productsCount" : 123, // Numero di prodotti interessati da queste categorie.
"productsDeleted" : 123, // Numero di prodotti eliminati a seguito dell'opzione "deleteProducts".
// NOTA: un prodotto presente in più categorie indicate viene conteggiato una sola volta.
},
...
]
}
categoryCopy - Copia o sposta prodotti tra categorie
Questa operazione non elimina alcun prodotto: i prodotti vengono semplicemente spostati da una categoria all'altra.
È la stessa funzione utilizzata dall'interfaccia quando apri Categories, selezioni una o più categorie e fai clic su Selected Categories > Copy & More. Puoi consultare questa sezione dell'interfaccia per una spiegazione più dettagliata.
{ "actions" : [
...
{
"a" : "categoryCopy",
"categoriesFrom" : ["Category 1", "Category 2"], // Seleziona i prodotti presenti in queste categorie (origine).
"removeMode" : "cat", // (facoltativo) Rimuovi i prodotti corrispondenti dalle categorie "categoriesFrom" indicate.
"removeMode" : "all", // (facoltativo) Rimuovi i prodotti corrispondenti da tutte le categorie di appartenenza.
// Se ometti removeMode, i prodotti restano in "categoriesFrom" e vengono anche aggiunti a "categoriesTo" (copia anziché spostamento).
"deleteMode" : "cat", // (facoltativo) Elimina le categorie "categoriesFrom" indicate dopo la copia dei prodotti.
"deleteMode" : "all", // (facoltativo) Elimina tutte le categorie a cui appartengono questi prodotti.
// Se ometti deleteMode, "categoriesFrom" continuerà a esistere anche dopo la rimozione dei prodotti tramite "removeMode".
"categoriesTo" : ["Another Category 1", "Another Category 2"],
// Inserisci tutti i prodotti corrispondenti in queste categorie di destinazione (quelle inesistenti vengono create).
"categoriesToClear" : 1, // (facoltativo) Svuota prima le categorie alle quali aggiungi i prodotti.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "categoryCopy",
"ok" : 3, // Numero di categorie modificate (sia di origine sia di destinazione).
// "ok" è la somma di categoriesModified + categoriesCreated + categoriesDeleted.
"categoriesModified" : 2, // Numero di categorie esistenti modificate (origine e destinazione).
"categoriesCreated" : 1, // Numero di nuove categorie create.
"categoriesDeleted" : 0, // Numero di categorie eliminate per effetto di "deleteMode".
"productsCount" : 123, // Numero di prodotti corrispondenti alle categorie "categoriesFrom" indicate.
// NOTA: un prodotto presente in più categorie "categoriesFrom" viene conteggiato una sola volta.
},
...
]
}
categoryGet - Recupera una categoria
{ "actions" : [
...
{
"a" : "categoryGet",
"name" : "The Category Name", // Non distingue maiuscole e minuscole.
"currency" : "EUR", // (OBBLIGATORIO se withStats o withProducts) Valuta da usare per le statistiche.
"withStats" : 1, // Restituisci anche le statistiche (più lento).
"withProducts" : 1, // Restituisci anche i prodotti di questa categoria (può generare molti dati).
"noCompetitors" : 1, // Se withProducts è attivo, non restituire l'array dei concorrenti (per ridurre i dati).
"noComments" : 1, // Se withProducts è attivo, non restituire i commenti dei prodotti (i commenti della categoria restano disponibili).
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "categoryGet",
"ok" : 1,
"name" : "The Category Name",
"created" : 1234567890, // Timestamp Epoch.
"createdBy" : "SOMEUSER", // Nome utente oppure "API".
"comments" : "Comments of this category",
"commentsLast" : 1234567890, // Timestamp Epoch dell'ultima modifica ai commenti, se presente.
"commentsLastBy" : "SOMEUSER", // Nome utente oppure "API".
"productsCount" : 10, // Numero di prodotti in questa categoria.
"stats" : {
// Queste statistiche sono visibili nell'interfaccia nella pagina della categoria e come colonne nell'elenco delle categorie.
// Per i dettagli, seleziona ogni statistica come colonna nell'elenco e fai clic su (?).
// Tutti gli importi sono nella "currency" specificata nella richiesta.
// ATTENZIONE: quando un importo non è disponibile (per esempio compIn* senza concorrenti con scorte), il valore è 0.
"priceAvg" : 123.45, // Prezzo medio dei tuoi prodotti.
"costAvg" : 123.45, // Nella media vengono inclusi solo i prodotti per cui è indicato un costo.
"marginAvg" : 10.5, // Percentuale (può essere negativa; conta solo i prodotti con un costo).
"rankAvg" : 1.23, // Posizione media del tuo prezzo (1 = nessuno ha un prezzo inferiore al tuo).
"rankInAvg" : 1.23, // Posizione media tra i concorrenti con scorte disponibili.
"productsCountComp" : 9, // Numero di prodotti con almeno un concorrente.
"productsCountCompIn" : 7, // Numero di prodotti con almeno un concorrente con scorte disponibili.
"compAvg" : 123.56, // Media delle medie di tutti i concorrenti.
"compAvgVsMe" : 123.56, // Differenza media (nella valuta specificata) tra il tuo prezzo e quelli dei concorrenti (negativa = il tuo prezzo è inferiore).
"compInAvg" : 123.56, // Come "compAvg", ma solo per i concorrenti con scorte disponibili.
"compInAvgVsMe" : 123.56, // Come "compAvgVsMe", ma solo per i concorrenti con scorte disponibili.
"compLowest" : 123.56, // Come "compAvg", ma come media del concorrente più economico di ciascun prodotto.
"compLowestVsMe" : 123.56, // Come "compAvgVsMe", ma ...
"compInLowest" : 123.56, // Come "compInAvg", ma ...
"compInLowestVsMe" : 123.56, // Come "compInAvgVsMe", ma ...
"compHighest" : 123.56, // Come "compAvg", ma come media del concorrente più caro di ciascun prodotto.
"compHighestVsMe" : 123.56, // Come "compAvgVsMe", ma ...
"compInHighest" : 123.56, // Come "compInAvg", ma ...
"compInHighestVsMe" : 123.56, // Come "compInAvgVsMe", ma ...
},
"products" : [ // Array dei prodotti (ordine alfanumerico per codice), ciascuno rappresentato da un oggetto:
...
{ ... }, // Oggetto prodotto come nella risposta dell'azione productGet.
...
],
},
...
]
}
categoryGetAll - Recupera tutte le categorie
{ "actions" : [
...
{
"a" : "categoryGetAll",
"withStats" : 1, // Restituisci anche le statistiche (più lento).
"noComments" : 1, // Non restituire i commenti (per ridurre i dati).
"noProducts" : 1, // Non restituire l'array dei prodotti (...).
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "categoryGetAll",
"ok" : 10, // Numero totale di categorie (lunghezza dell'array "categories").
"categories" : [ // Array delle categorie (in ordine alfabetico), ciascuna rappresentata da un oggetto:
...
{
"name" : "The Category Name",
"created" : 1234567890, // Timestamp Epoch.
"createdBy" : "SOMEUSER", // Nome utente oppure "API".
"comments" : "Comments of this category",
"commentsLast" : 1234567890, // Timestamp Epoch dell'ultima modifica ai commenti, se presente.
"commentsLastBy" : "SOMEUSER", // Nome utente oppure "API".
"productsCount" : 2, // Numero di prodotti in questa categoria.
"products" : ["REF-CODE-1", "REF-CODE-2"], // Codici di riferimento dei prodotti (ordine alfabetico), tranne con noProducts=1.
"stats" : {
// Se "withStats" è attivo, lo stesso oggetto di statistiche dell'azione categoryGet (qui sopra).
...
},
}
...
],
},
...
]
}
Avvisi
alertRecipientCreate - Crea un nuovo destinatario degli avvisi
Fai clic sulle icone verdi con il punto interrogativo nel tuo account per leggere i dettagli di ogni campo.
{ "actions" : [
...
{
"a" : "alertRecipientCreate",
"email" : "john@example.net", // Può anche essere un numero di telefono per gli avvisi SMS: vedi la guida nell'interfaccia.
"name" : "john", // Nome semplice da visualizzare (di solito il nome proprio; non distingue maiuscole e minuscole).
"maxFrequency" : 1800, // (facoltativo, predefinito 7200) Vedi la guida nell'interfaccia.
"simplify" : 0, // (facoltativo, predefinito 1) Attiva la semplificazione (vedi la guida nell'interfaccia).
"sleepEnabled" : 1, // (facoltativo) Attiva la fascia oraria di sospensione.
"sleepFrom" : "18:30", // (solo se sleepEnabled è attivo) Formato 24 ore.
"sleepTo" : "07:00", // (solo se sleepEnabled è attivo) Formato 24 ore.
"timezone" : "America/Los_Angeles", // (solo se sleepEnabled è attivo) Il formato è il percorso delle cartelle Linux in /usr/share/zoneinfo.
// Gli spazi vengono convertiti in trattini bassi.
// Cerca il tuo fuso orario nel modulo [New Recipient] dell'interfaccia per riportarlo esattamente.
"status" : "hold", // (facoltativo) Imposta la modalità "hold" o "disable". Con qualsiasi altro valore (anche "") resta attivo.
"rules" : [...], // (facoltativo) Regole iniziali degli avvisi (array di oggetti regola), come "rulesAdd" in alertRecipientEdit qui sotto.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "alertRecipientCreate",
"ok" : 1,
},
...
]
}
alertRecipientEdit - Modifica un destinatario degli avvisi e/o le relative regole
Fai clic sulle icone verdi con il punto interrogativo nel tuo account per leggere i dettagli di ogni campo.
La pagina "email" è quello che determina quale destinatario verrà aggiornato. Tutti gli altri campi modificano le impostazioni di quel destinatario.
{ "actions" : [
...
{
"a" : "alertRecipientEdit",
"email" : "john@example.net", // Email o numero di telefono attuale (nello stesso formato restituito da alertGetAll).
"newEmail" : "john2@example.net", // (facoltativo) Nuova email o numero di telefono: vedi la guida nell'interfaccia.
"name" : "john2", // (facoltativo) Nuovo nome.
"maxFrequency" : 1800, // (facoltativo) Vedi la guida nell'interfaccia.
"simplify" : 1, // (facoltativo) Attiva la semplificazione (vedi la guida nell'interfaccia).
"sleepEnabled" : 1, // (facoltativo) Attiva la fascia oraria di sospensione.
"sleepFrom" : "18:30", // (solo se sleepEnabled è attivo) Formato 24 ore.
"sleepTo" : "07:00", // (solo se sleepEnabled è attivo) Formato 24 ore.
"timezone" : "America/Los_Angeles", // (solo se sleepEnabled è attivo) Vedi l'azione alertRecipientCreate qui sopra.
"status" : "hold", // (facoltativo) Imposta "hold" o "disable". Ogni altro valore (come "") attiva la modalità "active".
"rules" : [{ruleObject}, {ruleObject}], // (facoltativo) Sovrascrivi tutte le regole esistenti (array vuoto per rimuoverle tutte).
// Non specificare l'array "rules" se vuoi mantenere le regole esistenti.
"rulesAdd" : [ // (facoltativo) Aggiungi queste regole a quelle esistenti.
...
{ // QUESTO È IL FORMATO DI UN OGGETTO REGOLA:
"name" : "me_cross_avg", // Vedi pagina Alerts > [Rules] > [+ New Rule], poi seleziona una regola per visualizzarne il nome API.
"disabled" : 1, // (facoltativo) Non avrebbe senso creare una regola disattivata, ma l'azione alertRuleEdit qui sotto può usare questo parametro.
"var_n" : 123.00, // Una variabile "X" diventa "var_x",
"var_c" : "USD", // ... quindi questi campi dipendono da ciò che richiede la regola,
"var_h" : 24, // ... (alcune regole non hanno variabili).
"direction" : "both", // Oppure "drop" o "rise", se la regola prevede una direzione.
"categories" : ["The Category 1", "The Category 2"], // (facoltativo) Vuoto o omesso significa TUTTI I PRODOTTI.
"ignoreOos" : 1, // (facoltativo) Ignora i concorrenti senza scorte (vedi interfaccia).
"urlInclude" : "", // (facoltativo, non distingue maiuscole e minuscole).
"urlExclude" : "amazon", // (facoltativo, non distingue maiuscole e minuscole).
// "ruleNumber" identifica ogni regola (per esempio per modificarla o eliminarla in seguito).
// Lo troverai negli oggetti restituiti quando leggi le regole, ma non puoi impostarlo.
}
...
],
"rulesRemove" : [1,4,7], // (facoltativo) Il "ruleNumber" delle regole da rimuovere.
// Puoi ottenere questo "ruleNumber" dall'azione alertGetAll qui sotto.
// NOTA: per rimuovere tutte le regole usa invece "rules" = [].
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "alertRecipientEdit",
"ok" : 3, // Numero di modifiche effettuate (variabili + numero di regole aggiunte/eliminate).
},
...
]
}
alertRecipientDelete - Elimina un destinatario degli avvisi
{ "actions" : [
...
{
"a" : "alertRecipientDelete",
"email" : "john@example.net", // Email o numero di telefono attuale (nello stesso formato restituito da alertGetAll).
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "alertRecipientDelete",
"ok" : 1,
},
...
]
}
alertRuleEdit - Modifica una regola degli avvisi esistente per un destinatario
Per eliminare una regola, usa l'array "rulesRemove" dell'azione alertRecipientEdit; per aggiungerne una nuova, usa invece l'array "rulesAdd" della stessa azione.
{ "actions" : [
...
{
"a" : "alertRuleEdit",
"email" : "john@example.net", // Email o numero di telefono del destinatario (stesso formato restituito da alertGetAll).
"ruleNumber" : 1, // Numero di riferimento della regola da modificare, restituito da alertGetAll qui sotto.
"rule" : {
// Variabili della regola da sovrascrivere: vedi "rulesAdd" in alertRecipientEdit qui sopra per il FORMATO DELL'OGGETTO REGOLA.
"disabled" : 1, // Per esempio, per attivare o disattivare una regola.
"var_n" : 5, // Oppure qualsiasi altra variabile, per esempio N, a seconda del tipo di regola.
...
},
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "alertRuleEdit",
"ok" : 1, // Numero di variabili modificate.
},
...
]
}
alertGetAll - Recupera tutti i destinatari degli avvisi e le relative regole
{ "actions" : [
...
{
"a" : "alertGetAll",
// Questa azione non richiede parametri.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "alertGetAll",
"ok" : 3, // Numero di destinatari (ovvero la lunghezza dell'array "recipients").
"recipients" : [ // Array di tutti i destinatari, ciascuno come un oggetto equivalente a quello dell'azione alertRecipientCreate qui sopra.
...
{
"email" : "john@example.net",
"name" : "john",
"maxFrequency" : 1800,
"simplify" : 0,
"sleepEnabled" : 1,
"sleepFrom" : "18:30",
"sleepTo" : "07:00",
"timezone" : "America/Los_Angeles",
"status" : "active",
"rules" : [ // Array delle regole, ciascuna come oggetto descritto nell'azione alertRecipientEdit qui sopra.
...
{
"ruleNumber" : 4, // Numero di riferimento da usare per modificare questa regola con alertRuleEdit qui sopra.
"name" : "me_cross_avg",
"disabled" : 0,
"var_n" : "123.00", // NOTA: tutte le variabili sono restituite come stringhe, anche quando contengono numeri.
"var_c" : "USD",
"var_h" : "24",
"direction" : "both",
"categories" : [], // Vuoto significa tutti i prodotti.
"ignoreOos" : 0,
"urlInclude" : "",
"urlExclude" : "amazon",
}
...
],
}
...
],
},
...
]
}
Regole di repricing
repricingCreate - Crea una nuova regola di repricing
Fai clic sulle icone verdi con il punto interrogativo nel tuo account per leggere i dettagli di ogni campo.
Ma come si assegnano i prodotti a una regola? Modificando i prodotti stessi, mediante l'azione productEdit o l'azione productRepricing. Una regola non "contiene" prodotti: sono i singoli prodotti a utilizzare una regola specifica tramite un riferimento a essa.
{ "actions" : [
...
{
"a" : "repricingCreate",
"name" : "The Rule Name", // Massimo 50 caratteri.
"init" : { // Oggetto della regola iniziale (prima riga denominata "Imposta il mio prezzo a").
"target" : "cheapest_n", // (vedi elenco qui sotto).
"var_n" : 3, // Solo se il target richiede una variabile N.
"plusAmount" : -2, // Positivo per sopra, negativo per sotto.
"plusCurrency" : "%", // Valuta (per esempio "USD") oppure "%".
// Corrisponde a "Imposta il mio prezzo il 2% sotto la media dei 3 concorrenti più economici".
// ATTENZIONE: a differenza degli oggetti "never" qui sotto, la regola iniziale non prevede "direction". È il segno di "plusAmount" a determinare sopra/sotto.
},
"never" : [ // (facoltativo) Oggetti "but never", eseguiti nell'ordine (da 0 a un massimo di 10).
{
"target" : "cheapest_n_in", // (vedi elenco qui sotto).
"var_n" : 1, // Solo se il target richiede una variabile N.
"direction" : "below", // Oppure "above".
"plusAmount" : -10, // Positivo per aggiungere, negativo per sottrarre (obbligatorio anche se 0).
"plusCurrency" : "USD", // Valuta o "%" (obbligatorio anche se plusAmount=0).
// Corrisponde a "Ma mai sotto il concorrente più economico con scorte, meno 10,00 USD".
},
{
"target" : "cost",
"direction" : "below",
"plusAmount" : 5,
"plusCurrency" : "%",
// Corrisponde a "Ma mai sotto il mio costo più il 5%".
}
],
"ignoreDomains" : "amazon ebay.com MyLabel1", // (facoltativo) Domini e/o etichette dei concorrenti da ignorare (non distingue maiuscole e minuscole; vedi interfaccia).
"charm" : "none|zeros|charm", // (facoltativo, predefinito "none") Prezzi psicologici ("", "none" e valore omesso producono lo stesso risultato).
"confidence" : 82, // (facoltativo, predefinito 70) Percentuale minima di affidabilità da 0 a 99 (vedi interfaccia).
"disabled" : 1, // (facoltativo)
},
...
] }
// ========== Tutti i valori "target" disponibili: ==========
// "average" : media di tutti i concorrenti.
// "average_in" : media di tutti i concorrenti con scorte disponibili.
// "cheapest_n" : media degli N concorrenti più economici (oppure "Il più economico" se N=1).
// "cheapest_n_in" : media degli N concorrenti più economici con scorte disponibili (oppure ...).
// "highest_n" : media degli N concorrenti più cari (oppure ...).
// "highest_n_in" : media degli N concorrenti più cari con scorte disponibili (oppure ...).
// "cost" : il mio costo.
// "me_avg_n" : media del mio prezzo nelle ultime N ore (per limitare la velocità delle variazioni di prezzo).
// "domain:example.com" : prezzo di example.com (il più basso se ci sono più URL sullo stesso dominio).
// "domainIn:example.com" : prezzo di example.com solo se disponibile (...).
RISPOSTA:{
...
"actions" : [
...
{
"a" : "repricingCreate",
"ok" : 3, // Numero di oggetti interpretati e salvati correttamente (per esempio init + never[0] + never[1] = 3).
"name" : "The Rule Name", // Nome finale nel database (potremmo convertirlo se contiene caratteri speciali).
},
...
]
}
repricingEdit - Modifica una regola di repricing esistente
Consulta repricingCreate qui sopra per capire come funzionano queste variabili.
Questa operazione modifica la regola stessa, non i prodotti a cui è assegnata. Per assegnare prodotti alle regole, usa invece l'azione productEdit o l'azione productRepricing.
{ "actions" : [
...
{
"a" : "repricingEdit",
"name" : "The Rule Name", // Non distingue maiuscole e minuscole.
"newName" : "The Rule Renamed", // (facoltativo) Massimo 50 caratteri.
"init" : { // (facoltativo) Se presente, sovrascrive le variabili della regola iniziale (vedi repricingCreate).
"plusAmount" : 1, // Per esempio, puoi sovrascrivere solo "plusAmount" lasciando invariate le altre variabili.
// ATTENZIONE: se il nuovo "target" richiede una variabile N, devi fornire anche "var_n".
},
"never" : [...], // (facoltativo) Puoi sovrascrivere l'intero array "never", ma di solito conviene usare never_*.
// "never":[] elimina tutte le condizioni esistenti; ometti questa variabile per mantenerle.
"never_0" : { // (facoltativo) Sovrascrive il primo oggetto "but never" (indice 0 dell'array).
"var_n" : 2, // Per esempio, puoi sovrascrivere soltanto "var_n" mantenendo le altre variabili.
},
"never_2" : {
"target" : "", // Disattiva la terza condizione "but never" (indice 2 dell'array).
// Se "target" è impostato a "", non devi preoccuparti delle altre variabili dell'oggetto.
// "never_2":{} produce lo stesso risultato.
},
"never_6" : {...}, // Potrebbe essere una nuova condizione "but never" da aggiungere: servono tutti i parametri come in repricingCreate.
// "never_9" è il valore massimo, dato che l'array "never" contiene fino a 10 elementi.
"ignoreDomains" : "", // (facoltativo) Come repricingCreate.
"charm" : "zeros", // (facoltativo) ...
"confidence" : 82, // (facoltativo) ...
"disabled" : 1, // (facoltativo) 0 per attivare una regola attualmente disattivata.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "repricingEdit",
"ok" : 3, // Numero di modifiche effettuate (per esempio una variabile di un oggetto never_N + un'altra di "init" + "charm").
"name" : "The Rule Name", // Nome finale (nuovo) nel database (potremmo convertirlo se contiene caratteri speciali).
},
...
]
}
repricingDelete - Elimina una regola di repricing
{ "actions" : [
...
{
"a" : "repricingDelete",
"name" : "The Rule Name", // Non distingue maiuscole e minuscole.
"onlyIfUnused" : 1, // (facoltativo) Per sicurezza, puoi usarlo per generare un errore quando alcuni prodotti utilizzano ancora la regola.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "repricingDelete",
"ok" : 1,
"productsCount" : 10, // Numero di prodotti che utilizzavano questa regola (e ora non ne hanno più).
},
...
]
}
repricingGetAll - Recupera tutte le regole di repricing
{ "actions" : [
...
{
"a" : "repricingGetAll",
// Questa azione non richiede altri parametri.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "repricingGetAll",
"ok" : 10, // Numero totale di regole (lunghezza dell'array "rules").
"rules" : [ // Array delle regole di repricing (in ordine alfabetico), ciascuna rappresentata da un oggetto:
...
{
"name" : "Some Repricing Rule",
"created" : 1234567890, // Timestamp Epoch della prima creazione della regola.
"createdBy" : "SOMEUSER", // Nome utente oppure "API".
"edited" : 1234567890, // Ora dell'ultima modifica (se presente; altrimenti il campo è assente).
"editedBy" : "SOMEUSER", // Nome utente o "API" (oppure campo assente).
"disabled" : 1234567890, // Se la regola è disattivata, timestamp Epoch dell'ultima disattivazione; altrimenti assente.
"disabledBy" : "SOMEUSER", // Nome utente o "API" (oppure campo assente).
"productsCount" : 10, // Numero di prodotti che utilizzano attualmente questa regola.
"ignoreDomains" : "amazon ebay.com MyLabel1", // Domini e/o etichette dei concorrenti ignorati (vedi interfaccia).
"charm" : "charm", // Modalità prezzi psicologici (none|zeros|charm).
"confidence" : 82, // Percentuale minima di affidabilità da 0 a 99 (vedi interfaccia).
"init" : { // Oggetto della regola iniziale (prima riga denominata "Imposta il mio prezzo a").
"target" : "cheapest_n", // (vedi elenco in repricingCreate).
"var_n" : 3, // Se il target richiede una variabile N; altrimenti il campo è assente.
"plusAmount" : -2, // Positivo per sopra, negativo per sotto.
"plusCurrency" : "%", // Valuta (per esempio "USD") oppure "%".
// Corrisponde a "Imposta il mio prezzo il 2% sotto la media dei 3 concorrenti più economici".
// ATTENZIONE: a differenza degli oggetti "never" qui sotto, la regola iniziale non prevede "direction". È il segno di "plusAmount" a determinare sopra/sotto.
},
"never" : [ // Oggetti "but never", eseguiti nell'ordine.
{
"target" : "cheapest_n_in",
"var_n" : 1,
"direction" : "below", // Oppure "above".
"plusAmount" : -10, // Positivo per aggiungere, negativo per sottrarre.
"plusCurrency" : "USD", // Valuta oppure "%".
// Corrisponde a "Ma mai sotto il concorrente più economico con scorte, meno 10,00 USD".
},
{}, // Questo significa che hai lasciato vuota la seconda riga delle condizioni "Ma mai".
{
"target" : "cost",
"direction" : "below",
"plusAmount" : 5,
"plusCurrency" : "%",
// Corrisponde a "Ma mai sotto il mio costo più il 5%".
}
],
}
...
],
},
...
]
}
Fogli di calcolo
spreadsheetDownload - Scarica un foglio di calcolo
Questa azione corrisponde alle operazioni disponibili nella pagina Export del tuo account.
Assicurati che il valore di timeout sia sufficientemente alto, perché la generazione di un foglio di calcolo di grandi dimensioni potrebbe richiedere del tempo.
PER SEMPLIFICARE: Puoi fare clic sul pulsante Show API equivalent nella pagina Export per generare l'intera chiamata JSON (e il comando curl) corrispondente alle opzioni selezionate nel modulo.
{ "actions" : [
{
"a" : "spreadsheetDownload",
"preset" : "Some Preset Name", // (facoltativo) Anziché fornire tutte le opzioni seguenti, puoi usare uno dei tuoi modelli preimpostati o uno dei nostri.
// Per i modelli personali, specifica il nome completo senza il nome utente prima né la valuta dopo.
// Per i modelli predefiniti, trovi il nome corrispondente nel menu DIRECT DOWNLOAD della pagina Export, passando il mouse sulle opzioni.
// Per esempio, "pricezag_backup" è il nostro modello speciale di backup (vedi "Special BACKUP format to re-import" nel menu DIRECT DOWNLOAD).
// Puoi anche specificare parametri che sovrascrivono quelli del modello (per esempio valuta, formato o categorie diversi).
"savePreset" : "My New Preset Name", // (facoltativo) Salva le opzioni indicate di seguito come nuovo modello, utilizzabile sia nell'interfaccia sia tramite API.
// ECCEZIONE DELL'ECCEZIONE: con savePreset non viene scaricato alcun foglio di calcolo; la risposta è un normale oggetto JSON.
"savePresetOverwrite" : 1, // (facoltativo) Sovrascrive il modello esistente indicato in "savePreset" (altrimenti viene restituito un errore).
// ATTENZIONE: sovrascrivere significa eliminare tutte le impostazioni precedenti del modello. Non usarlo per cambiare soltanto un campo.
// Per rinominare o eliminare un modello, usa l'azione spreadsheetPresetEdit qui sotto.
"downloadURL" : 1, // (facoltativo) ECCEZIONE DELL'ECCEZIONE: anziché restituire il file, restituisce un normale oggetto JSON contenente "fileURL",
// un URL pubblico del file (non richiede autenticazione né chiave API). Il file sarà scaricabile da chiunque, ovunque, per 15 minuti.
// Il valore "ok" indica il numero di righe; è disponibile anche "fileSize" in byte.
"format" : "xlsx|xls|csv|csv-tab", // (predefinito csv per l'API).
"currency" : "USD", // (OBBLIGATORIO senza preset) Valuta nella quale verranno espressi TUTTI gli importi.
"categories" : ["Category 1", "Category 2"], // Includi solo i prodotti di queste categorie (altrimenti tutti i prodotti).
"historyPeriod" : "prev_6mo", // (facoltativo, predefinito "now").
// PRIMA di tutto, fai clic sulle icone (?) della pagina Export relative ai periodi storici: ne spiegano il funzionamento.
// "historyPeriod" determina quanto indietro nel tempo leggere gli importi, prima di suddividerli in più righe per prodotto in base a "historyRow".
// "now": nessuna cronologia, solo dati attuali (quindi nessun "historyRow").
// "all": leggi l'intera cronologia disponibile dalla registrazione (o almeno quella dei prodotti interessati). PUÒ ESSERE LENTO.
// "1234500000-1237800000": periodo personalizzato (timestamp Epoch di inizio e fine).
// "123h": ultime 123 ore; nessun allineamento al calendario, il periodo termina ora e può iniziare a metà di un'ora.
// "cur_123(d|wk|mo|yr)": ultimi 123 giorni/settimane/mesi/anni, incluso il periodo corrente incompleto. "cur_2mo" scaricato il giorno 10 copre 40 giorni.
// "prev_123(d|wk|mo|yr)": 123 periodi precedenti completi. "prev_2mo" scaricato il 10 febbraio copre dicembre e gennaio (62 giorni).
// L'inizio dei periodi cur_* e prev_* (e la fine di prev_*) è sempre allineato alla mezzanotte precedente; cur_* termina invece all'istante attuale,
// quindi "cur_2d" scaricato a mezzogiorno copre 36 ore, mentre "prev_2d" copre 48 ore terminando 12 ore prima.
"historyRow" : "2w", // (obbligatorio, ma solo se "historyPeriod" non è "now").
// "historyRow" determina la durata rappresentata da ogni riga (media di quel periodo), generando più righe per prodotto (salvo "all").
// Puoi considerare "historyRow" come la SUDDIVISIONE di "historyPeriod" in righe individuali per prodotto.
// "all": calcola la media di tutto historyPeriod in una sola riga per prodotto.
// "123(d|wk|mo|qt|yr)": intervalli di 123 giorni/settimane/mesi/trimestri/anni di calendario allineati alla mezzanotte. Puoi omettere 123 se vale 1 ("wk" equivale a "1wk").
// Scaricando di sabato con historyRow:"7d", ogni riga rappresenta la media da sabato alle 00:00 a venerdì alle 23:59.
// Con historyRow:"1wk", invece, ogni riga rappresenta la media da lunedì alle 00:00 a domenica alle 23:59; l'ultima riga copre la settimana corrente incompleta, da lunedì a sabato.
// ▶ LIMITE DI 500.000 RIGHE: l'interfaccia e l'API rifiutano i parametri storici che produrrebbero oltre 500.000 righe.
// Questo può accadere facilmente con historyRow:"day" e un historyPeriod molto esteso, per esempio 365 giorni × 1.400 prodotti.
// Se vuoi davvero ottenere questi dati, scarica più fogli di calcolo, uno per categoria con qualche centinaio di prodotti.
"timezone" : "America/Los_Angeles", // (facoltativo, predefinito "UTC") Il formato è il percorso delle cartelle Linux in /usr/share/zoneinfo.
// Gli spazi vengono convertiti in trattini bassi.
// Il fuso orario serve soltanto se le opzioni history* utilizzano periodi di calendario (per stabilire la mezzanotte).
// L'interfaccia prende il fuso orario dalle impostazioni dell'utente; l'API non dispone di queste impostazioni, quindi devi indicarlo nella richiesta.
// ========== COLONNE: ==========
// Le variabili column* stabiliscono quali colonne saranno presenti nel foglio (vedi la guida relativa ai campi nella pagina Export).
// Tutte sono impostate a 0 per impostazione predefinita (colonna assente), eccetto Code.
"columnCode" : 1, // Questa colonna non può essere rimossa: contiene sempre il codice REF-CODE di ogni prodotto.
"columnName" : 1, // Nome del prodotto.
"columnCategories" : 1, // Categorie attuali del prodotto ("Category 1; Category 2" in un'unica cella).
"columnComments" : 1, // Commenti del prodotto.
"columnCreated" : 1, // Data di creazione del prodotto YYYY/MM/DD (nel nostro sistema).
"columnCustom" : 1, // Campi personalizzati dei prodotti (una colonna per ogni variabile distinta).
"columnPrice" : 1, // Prezzo del prodotto nella valuta richiesta (NON nella valuta originale del prodotto).
"columnCost" : 1, // Costo del prodotto (nella valuta richiesta ...).
"columnMargin" : 1, // Margine percentuale del prodotto calcolato da prezzo e costo.
"columnRank" : 1, // La mia posizione in classifica.
"columnInRank" : 1, // La mia posizione tra i prodotti disponibili.
"columnMyWebsite" : 1, // URL del mio sito.
"columnReprice" : 1, // Importo di repricing (nella valuta richiesta ...).
"columnRepricingRule" : 1, // Nome della regola di repricing.
"columnRecommended" : 1, // Prezzo consigliato (vedi guida nella pagina Export).
"columnCompUrls" : 1, // URL dei concorrenti (uno per colonna).
"columnCompUrlsJoin" : 1, // URL dei concorrenti (separati da spazi in un'unica cella).
"columnCompMinMaxAvg" : 1, // Aggiunge 3 colonne: minimo/massimo/media dei concorrenti.
"columnInCompMinMaxAvg" : 1, // Aggiunge 3 colonne: minimo/massimo/media dei concorrenti CON SCORTE.
"columnCompPrice" : 1, // Aggiunge una colonna per concorrente con il suo prezzo (nella valuta richiesta ...).
"columnCompStock" : 1, // Aggiunge una colonna per concorrente con le sue scorte (123|IN|OUT).
"columnCompSales" : 1, // Aggiunge una colonna per concorrente con le vendite settimanali.
"columnCompRank" : 1, // Aggiunge una colonna per concorrente con la sua posizione tra tutti (te incluso).
"columnCompInRank" : 1, // Aggiunge una colonna per concorrente con la posizione tra quelli CON SCORTE (te incluso).
// ========== PARAMETRI AVANZATI NON DOCUMENTATI: ==========
// Esistono alcune opzioni non ufficiali che non documentiamo nel dettaglio; alcune sono usate, per esempio, dal modello "pricezag_backup".
"originalCurrencies" : 1, // Anziché convertire gli importi nella valuta richiesta per ottenere celle numeriche, le celle conterranno stringhe con la valuta originale ("123.90 USD").
"keepUrlLabels" : 1, // Normalmente rimuoviamo le etichette dagli URL dei concorrenti. Questa opzione le conserva (utile per i backup).
"csvSeparator" : ";", // Permette di usare nel CSV un carattere separatore diverso da virgola o tabulazione.
"csvNoQuote" : 1, // Impedisce di usare virgolette (") nel CSV. Attenzione: potrebbe rendere il formato non valido.
}
] }
// Un modo semplice per scaricare un backup CSV è:
// curl --connect-timeout 15 --max-time 600 --retry 2 -X POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"spreadsheetDownload","preset":"pricezag_backup"}]}' -o pricezag-backup-20241225.csv
spreadsheetPresetEdit - Rinomina o elimina un modello preimpostato di foglio di calcolo
Serve solo a RINOMINARE o ELIMINARE un modello preimpostato. Per crearne uno nuovo o modificarne uno esistente, devi usare l'azione spreadsheetDownload qui sopra.
{ "actions" : [
{
"a" : "spreadsheetPresetEdit",
"preset" : "Some Preset Name", // Nome attuale del modello preimpostato.
"newName" : "The Renamed Preset", // Per rinominare questo modello.
"delete" : 1, // Elimina il "preset" dall'account.
// NOTA: non puoi eliminare un modello utilizzato per le esportazioni automatiche (viene restituito un errore).
// Devi prima eliminare le esportazioni automatiche programmate (vedi pagina Export).
}
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "spreadsheetPresetEdit",
"ok" : 1,
},
...
]
}
spreadsheetAutoCreate - Crea una nuova esportazione automatica di fogli di calcolo
{ "actions" : [
{
"a" : "spreadsheetAutoCreate",
"preset" : "The Preset Name",
"email" : "john@example.net",
"currency" : "USD", // (facoltativo) Il valore predefinito è "preset", che usa la valuta del modello selezionato.
"attach" : "link", // (facoltativo, predefinito "attach") "attach" per allegare il file, "link" per fornire un collegamento diretto al file ospitato.
"everyMonday" : 1, // Invia il foglio di calcolo ogni lunedì.
"everyTuesday" : 1, // ... (e così via per ogni giorno della settimana fino a "everySunday").
"everyMonthDay1" : 15, // Invia il giorno 15 di ogni mese.
"everyMonthDay2" : 21, // ... e anche il giorno 21.
"everyMonthDay3" : "last", // ... e anche l'ultimo giorno del mese.
// everyMonthDay* può andare da 0 a 9, per un massimo di 10 giorni del mese.
"time" : "3:59pm", // Anche "15.59" è valido e viene convertito in "3:59pm". "0:9", "0.09", "00:09" e "0:09am" sono equivalenti.
"timezone" : "America/Los_Angeles", // (facoltativo, predefinito "UTC") Il formato è il percorso delle cartelle Linux in /usr/share/zoneinfo.
// Gli spazi nei nomi delle città vengono convertiti in trattini bassi.
}
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "spreadsheetAutoCreate",
"ok" : 1,
"id" : "5gwi6fqa", // ID di riferimento dell'esportazione automatica, per modificarla in seguito (vedi spreadsheetAutoEdit qui sotto).
},
...
]
}
spreadsheetAutoEdit - Modifica un'esportazione automatica di fogli di calcolo
{ "actions" : [
{
"a" : "spreadsheetAutoEdit",
"id" : "5gwi6fqa", // ID di riferimento dell'esportazione automatica da modificare.
// L'ID viene restituito da spreadsheetAutoCreate, ma puoi vederlo anche nell'interfaccia, nel titolo della finestra che si apre facendo clic su Edit per un'esportazione automatica.
"disabled" : 1, // (facoltativo) 0 per attivare un'esportazione automatica attualmente disattivata.
"delete" : 1, // (facoltativo) Elimina definitivamente questa esportazione automatica.
// ===== I parametri seguenti (tutti facoltativi) sono gli stessi dell'azione spreadsheetAutoCreate qui sopra =====
"preset" : "The Preset Name",
"email" : "john@example.net",
"currency" : "USD",
"attach" : "link",
"everyMonday" : 1, // ATTENZIONE: quando specifichi almeno una variabile every*, tutte le variabili every* esistenti vengono cancellate,
"everyMonthDay1" : 15, // quindi, se prima avevi "everyFriday"=1, impostare "everyMonthDay3" rimuove quel "everyFriday".
// ... e così via (vedi spreadsheetAutoCreate per tutte le variabili every*).
"time" : "3:59pm",
"timezone" : "America/Los_Angeles",
}
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "spreadsheetAutoEdit",
"ok" : 3, // Numero di modifiche effettuate.
},
...
]
}
Concorrenti e altre funzioni
competitorDeleteAll - Elimina un concorrente da tutti i prodotti o dalle categorie
ATTENZIONE: gli URL del concorrente vengono eliminati immediatamente dall'account e non possono essere recuperati.
È la stessa funzione utilizzata dall'interfaccia quando apri la pagina di un concorrente e fai clic su Delete from all Products, oppure apri la pagina di una categoria e fai clic sull'icona (X) nell'elenco dei concorrenti.
{ "actions" : [
...
{
"a" : "competitorDeleteAll",
"domain" : "competitordomain.com",
"categories" : ["The Category 1", "The Category 2"], // (facoltativo) Se omesso, devi usare "allProducts" = 1.
"allProducts" : 1, // (facoltativo) Per eliminare da tutti i prodotti (NON specificare "categories").
// Devi scegliere "categories" oppure "allProducts": non entrambi e non nessuno.
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "competitorDeleteAll",
"ok" : 10, // Numero di URL eliminati.
},
...
]
}
mathEdit - Imposta o modifica i calcoli di prezzo per un dominio concorrente
Fai clic sulle icone verdi con il punto interrogativo nel tuo account per leggere i dettagli di ogni campo.
{ "actions" : [
...
{
"a" : "mathEdit",
"domain" : "competitordomain.com",
"clear" : 1, // (facoltativo) Disattiva tutti i calcoli per quel dominio (elimina tutte le impostazioni precedenti).
// Se imposti clear:1 non puoi fornire altri parametri seguenti, altrimenti ottieni un errore.
"math" : [ // Array dei blocchi di calcolo da applicare.
{ // Questo è un oggetto blocco di calcolo; tutti i campi sono facoltativi.
"categories" : ["Category 1", "Category 2"], // Solo per i prodotti di queste categorie.
"theirPriceMin" : 1234.90, // Solo quando il loro prezzo è maggiore o uguale a N.
"theirPriceMinCurrency" : "USD", // Valuta (puoi usare "original" per mantenere la valuta del sito).
"theirPriceMax" : 1234.90, // ... minore o uguale.
"theirPriceMaxCurrency" : "USD", // Valuta (...).
"themMeMin" : -20.00, // Solo quando [loro-noi] è maggiore o uguale a N (vedi interfaccia).
"themMeMinCurrency" : "USD", // Valuta oppure "%" del tuo prezzo (NON usare "original" qui).
"themMeMax" : -1.5, // ... minore o uguale.
"themMeMaxCurrency" : "%", // Valuta (...).
"addPre" : -10.00, // Importo da aggiungere prima della moltiplicazione (o sottrarre se negativo).
"addPreCurrency" : "USD", // Valuta (puoi usare "original" per mantenere la valuta del sito).
"multiply" : 1.1, // Moltiplica per questo fattore.
"divide" : 1.1, // OPPURE dividi (non specificare entrambe le opzioni).
"addPost" : 5.00, // Importo da aggiungere dopo la moltiplicazione (o sottrarre se negativo).
"addPostCurrency" : "USD", // Valuta (...).
// Ti sembra complicato? Guarda l'esempio semplice dopo la risposta.
},
... // Fino a 10 blocchi in totale (i calcoli vengono applicati nell'ordine).
],
// NOTA: attualmente non puoi modificare solo una singola variabile o un blocco di calcolo. Fornendo l'array math sostituisci tutte le impostazioni esistenti.
// NOTA: un blocco che non moltiplica né divide (valore assente o 1) e non presenta addPre!=0 o addPost!=0 viene ignorato;
// se tutti i blocchi vengono ignorati, il risultato è equivalente a eliminare tutti i calcoli con clear:1.
// In altre parole, i calcoli devono produrre un effetto concreto per essere salvati.
// SUGGERIMENTO: per disattivare temporaneamente i calcoli di un dominio senza eliminarne le impostazioni,
// puoi impostare categories: ["Some Empty Existing Category"].
},
...
] }
RISPOSTA:{
...
"actions" : [
...
{
"a" : "mathEdit",
"ok" : 3, // Numero di blocchi di calcolo modificati (anche rimuovere/azzerare conta come modifica).
},
...
]
}
ESEMPIO SEMPLICE — Rimuovere un'imposta del 10% da tutti i prezzi su amazon.co.uk:{ "actions" : [
{
"a" : "mathEdit",
"domain" : "amazon.co.uk",
"math" : [
{
"divide" : 1.1
}
]
}
] }
Altri esempi
▶ ESEMPIO 1 — Aggiornare il costo di un prodotto
RICHIESTA:
{
"actions" : [
{
"a" : "productEdit",
"code" : "SKU-1234",
"cost" : 140.50,
"costCurrency" : "EUR"
}
]
}
RISPOSTA:{
"ok" : 1, // Restituirebbe 0 se SKU-1234 avesse già quel costo.
"errors" : 0, // Restituirebbe 1 se SKU-1234 non esistesse.
"actionsCount" : 1,
"actions" : [
{
"a" : "productEdit",
"ok" : 1 // Restituirebbe 0 se SKU-1234 avesse già quel costo, oppure -1 se non esistesse.
}
]
}
▶ ESEMPIO 2 — Consultare un prodotto inesistente
RICHIESTA:
{
"actions" : [
{
"a" : "productGet",
"code" : "NON-EXISTING-SKU",
"currency" : "USD"
}
}
RISPOSTA:{
"ok" : 0, // Perché nessuna azione ha restituito ok>0.
"errors" : 1, // Perché un'azione ha restituito ok<0.
"actionsCount" : 1,
"actions" : [
{
"a" : "productGet",
"ok" : -1, // È così che sai che l'azione non è riuscita.
"error" : "Sorry, the product #NON-EXISTING-SKU does not exist. Maybe someone else just removed or renamed it?"
}
]
}
▶ ESEMPIO 3 — Creare una categoria, una regola di repricing e poi due prodotti assegnati a entrambe
RICHIESTA:
{
"actions" : [
{
"a" : "categoryCreate",
"name" : "My New Category"
},
{
"a" : "repricingCreate",
"name" : "My New Repricing Rule",
"init" : {
"target" : "cheapest_n",
"var_n" : 2,
"plusAmount" : 0,
"plusCurrency" : "%"
// Corrisponde a "Imposta il mio prezzo a metà strada tra i 2 concorrenti più economici".
},
"never" : [
{
"target" : "cost",
"direction" : "below",
"plusAmount" : 5,
"plusCurrency" : "%"
// Corrisponde a "Ma mai sotto il mio costo + 5%".
}
],
"charm" : "charm"
},
{
"a" : "productCreate",
"code" : "SKU-1001",
"name" : "My New Product 1",
"price" : 199.90,
"currency" : "USD",
"cost" : 112.00,
"costCurrency" : "USD",
"repricingRule" : "My New Repricing Rule", // Lo stesso nome della regola che abbiamo appena creato.
"categories" : ["My New Category"], // Lo stesso nome della categoria che abbiamo appena creato.
// ... anche se productCreate crea comunque categorie inesistenti, quindi categoryCreate non era necessaria.
"competitors" : ["https://...", "https://..."]
},
{
"a" : "productCreate",
"code" : "SKU-1002",
"name" : "My New Product 2",
"price" : 59.95,
"currency" : "USD",
"cost" : 31.50,
"costCurrency" : "USD",
"repricingRule" : "My New Repricing Rule",
"categories" : ["My New Category"],
"competitors" : ["https://...", "https://..."]
}
]
}
RISPOSTA:{
"ok" : 4, // Perché tutte e 4 le azioni hanno restituito ok>0.
"errors" : 0, // Perché nessuna azione ha restituito ok<0.
"actionsCount" : 4,
"actions" : [
{
"a" : "categoryCreate",
"ok" : 1
},
{
"a" : "repricingCreate",
"ok" : 1
},
{
"a" : "productCreate",
"ok" : 1
},
{
"a" : "productCreate",
"ok" : 1
}
]
}
▶ ESEMPIO 4 — Unire due categorie in un'altra eliminando le due categorie originali
RICHIESTA:
{
"actions" : [
{
"a" : "categoryCopy",
"categoriesFrom" : ["Original Category 1", "Original Category 2"],
"deleteMode" : "cat",
// Nota che "removeMode":"cat" è superfluo, perché deleteMode eliminerà comunque queste due categorie.
"categoriesTo" : ["A New Category"]
}
}
RISPOSTA:{
"ok" : 1, // Perché un'azione ha restituito ok>0.
"errors" : 0, // Perché nessuna azione ha restituito ok<0.
"actionsCount" : 1,
"actions" : [
{
"a" : "categoryCopy",
"ok" : 3, // Perché sono state modificate 3 categorie: eliminate le due originali e creata quella di destinazione.
"categoriesCreated" : 1,
"categoriesDeleted" : 2,
"categoriesModified" : 0,
"productsCount" : 123
}
]
}
▶ ESEMPIO 5 — Modificare la variabile N e la direzione di una regola di avviso
RICHIESTA:
{
"actions" : [
{
"a" : "alertRuleEdit",
"email" : "john@example.net",
"ruleNumber" : 3,
"rule" : {
"var_n" : 1.5,
"direction" : "drop"
}
}
}
RISPOSTA:{
"ok" : 1, // Perché un'azione ha restituito ok>0.
"errors" : 0, // Perché nessuna azione ha restituito ok<0.
"actionsCount" : 1,
"actions" : [
{
"a" : "alertRuleEdit",
"ok" : 2 // Perché 2 variabili sono state modificate correttamente.
}
]
}
