PriceZag API - Koppla prisdata till dina system
Använd PriceZags JSON API för att hämta konkurrenternas priser och lagersaldo, hantera produkter och regler för automatisk prisjustering, ladda ned rapporter och automatisera arbetsflöden.
Snabbt exempel med curl
MYAPIKEY med API-nyckeln för ditt konto (se API-nyckel).Skapa en testprodukt:
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"}]}'
(om du kör kommandot en gång till får du ett fel eftersom produkten redan finns)Nu kan du hämta produkten igen:
curl -X POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"productGet","code":"000-SOME-TEST-PRODUCT"}]}' | python -mjson.tool
(ta bort | python -mjson.tool om du inte har verktyget som formaterar JSON-svaret i terminalen)Översikt
Vad du kan göra med PriceZag API
Med PriceZags JSON API kan dina skript och affärssystem arbeta direkt med de konkurrentpriser och lagersaldon som vi bevakar. Hämta produktdata, hantera produkter och kategorier, beräkna belopp utifrån regler för automatisk prisjustering, konfigurera aviseringar och ladda ned anpassade kalkylblad. API:et fungerar med alla e-handelsplattformar och programmeringsspråk som kan skicka HTTPS-begäranden och hantera JSON.
Du kan också be din favoritassistent med AI att skriva skripten åt dig. Ge den webbadressen till den här dokumentationen (https://pricezag.com/integrations/api), förklara vad du vill automatisera och ange vilket programmeringsspråk eller vilken e-handelsplattform du använder. Håll API-nyckeln hemlig - klistra inte in den i en AI-konversation.
PriceZag sköter själva bevakningen på vår plattform, så API:et är valfritt. Det är användbart när du vill koppla dina egna system till dessa data. Shopify och WooCommerce har också direkta integrationer.
API-nyckel och behörigheter
Öppna Automation > API i ditt PriceZag-konto. Klicka på Reveal the current API key för att visa din nuvarande nyckel, eller Change the API key för att byta ut den. Båda åtgärderna kräver ditt kontolösenord. Din användare måste ha rätt behörighet för att visa eller skapa API-nycklar. Kontakta en kontoadministratör om du saknar behörighet.
Håll API-nyckeln hemlig. Den kan ge möjlighet att göra omfattande ändringar i kontodata, inklusive radering. Lägg inte nyckeln i offentliga kodarkiv, kod som körs i webbläsaren eller AI-konversationer. Om någon ska hjälpa dig med en integration, skapa en PriceZag-användare med rätt behörigheter och byt API-nyckel vid behov.
API-åtkomst beror på ditt abonnemang. Med full API-åtkomst kan dina skript arbeta med alla produkter. Utan full åtkomst kan API:et bara nå de första 10 produkterna sorterade alfanumeriskt efter referenskod. Om du exempelvis har 1 000 produkter med koder från SKU0001 till SKU1000 kan API:et komma åt SKU0001 till och med SKU0010. Den kostnadsfria provperioden på 14 dagar omfattar full API-åtkomst. Du kan också aktivera full API-åtkomst som ett tillval i ditt abonnemang.
API-aktivitetslogg och senaste begäran
Sidan Automation > API i ditt konto visar tidpunkten för den senaste API-begäran och har knappen API Activity Log. Kontrollera detta om ett skript inte fungerar: Du kan se om begärandena nådde PriceZag och undersöka fel eller oväntade ändringar.
Ändringar som görs via API:et visas också i History of Edits i hela kontot under användarnamnet API. Till exempel kan en produkts ändringshistorik visa Price edited by API i stället för Price edited by JOHN. PriceZag stöder flera användare på samma konto, så att du kan skilja automatiserade ändringar från ändringar som teammedlemmar gör.
Begärans URL och metoder
Alla API-begäranden använder samma HTTPS-URL. Skicka POST-begäranden till den och ersätt MYAPIKEY med din nyckel:
https://pricezag.com/api/v3/MYAPIKEY
Det du vill göra med API:et ("actions") och dess parametrar ska ligga i JSON-innehållet i begäran, inte i URL:en.
Skicka ett JSON-objekt med en eller flera åtgärder i POST-begärans innehåll. URL:en är densamma oavsett om du hämtar en produkt, uppdaterar priser eller laddar ned ett kalkylblad.
Kan du inte skicka POST?
Som en sista utväg kan du skicka en GET-begäran med JSON-innehållet Base64-kodat i ?data=-URL-parametern. URL:er har längdbegränsningar, så POST rekommenderas starkt.
Så fungerar åtgärder
Vårt API och användargränssnitt (UI) använder samma funktioner i vårt system, så nästan alla åtgärder i gränssnittet kan också utföras via API:et.
När du skickar en API-begäran innehåller dina JSON-data en array med alla åtgärder du vill utföra, från 1 till högst 1 000 per begäran. Du kan till exempel byta namn på 3 produkter och skapa en ny kategori i en enda begäran med 4 åtgärder. Du kan också hämta data för 1 000 produkter samtidigt med 1 000 "productGet"-åtgärder.
Åtgärderna utförs i den ordning de står i arrayen. Om du först skapar en regel för automatisk prisjustering och sedan kopplar produkter till den måste åtgärderna stå i den ordningen, så att regeln finns när produkterna ändras.
Bläddra ned för att se listan över alla tillgängliga åtgärder.
JSON-objektet i din begäran
För skript och AI-genererad kod: Referensexemplen nedan innehåller //-kommentarer och ...-platshållare som förklarar fälten. De är illustrationer, inte giltig JSON som kan skickas oförändrad. Ta bort kommentarer och platshållare innan du skickar en begäran. De två curl-exemplen ovan innehåller giltigt JSON-innehåll.
{
"stopOnFailure" : 1, // (valfritt) Som standard fortsätter systemet till nästa åtgärd även om en åtgärd misslyckas. Sätt till 1 för att stoppa vid fel.
// Array med alla åtgärder:
"actions" : [
// Åtgärd 1:
{
"a" : "someActionName", // Åtgärdens namn anges alltid i fältet "a" i varje åtgärdsobjekt.
"xx" : "some parameter this action needs" // Alla övriga fält är parametrar som åtgärden behöver.
},
// Åtgärd 2:
{
"a" : "anotherActionName",
"abc" : "some parameter this action needs",
"xyz" : {"x":"some object this action needs", "y":5, "z":6}
},
// Åtgärd 3:
{
"a" : "aThirdAction",
"xyz" : ["some array this action needs", "..."]
}
]
}
Serversvar och HTTP-statuskoder
Om begäran är korrekt får du normalt ett JSON-objekt som svar, förutom några åtgärder som uttryckligen är undantagna (t.ex. nedladdning av kalkylblad). Det ser du på svarshuvudet Content-Type: application/json.
Vår HTTP-svarskod är:
► 200 när alla åtgärder lyckades (det neutrala resultatet ok=0 räknas som lyckat)
► 406 när några åtgärder lyckades medan andra misslyckades.
► 422 när alla åtgärder misslyckades, men inte av orsakerna nedan.
► 400 när det mottagna JSON-objektet inte kunde avkodas.
► 403 när autentiseringen misslyckades (vanligtvis på grund av fel API-nyckel).
Du kan använda dessa statuskoder direkt i dina skript. Behöver du fler detaljer innehåller JSON-objektet som returneras mer information:
{
"ok" : 15, // Antal lyckade åtgärder (åtgärdens ok>0).
"errors" : 0, // Antal åtgärder som gav fel (åtgärdens ok<0).
"actionsCount" : 20, // Totalt antal begärda åtgärder (storleken på arrayen "actions").
// OBS: Av detta kan vi se att 5 åtgärder returnerade ok=0 (inget fel men heller ingen ändring).
// Array med alla ursprungligen begärda åtgärder (i samma ordning):
"actions" : [
...
// Svarsobjekt för varje åtgärd:
{
"a" : "someActionName",
"ok" : 4, // Resultat: >0 = lyckat, 0 = ingen ändring, <0 = fel.
// 0 kan exempelvis förekomma om du sätter ett produktpris till samma värde som tidigare.
// -1 kan förekomma om produkten inte finns.
// Betydelsen av >0 beror på åtgärden. Ofta är det antalet fält eller objekt som faktiskt ändrades.
"error" : "...", // Felmeddelande om ok < 0.
// Våra felmeddelanden är mycket detaljerade. Spara dem i en logg,
// eftersom de innehåller det du behöver för att förstå felet.
... // Andra data som den här åtgärden returnerar.
},
...
]
}
Exempel?
Begärandegränser och schemaläggning
För att undvika att dina legitima begäranden blockeras:
► Använd aldrig en felaktig API-nyckel; brandväggen tolererar få försök med felaktiga nycklar (detsamma gäller fel lösenord på vår webbplats).
► Samla flera åtgärder i en enda begäran i samma JSON-objekt (högst 1 000). Om du ska skapa 1 000 produkter skickar du en begäran, inte 1 000.
► Om du måste skicka många begäranden, vänta 500 ms mellan dem och återanvänd samma HTTPS-anslutning. Det är ett vanligt misstag att öppna en ny anslutning för varje begäran. Många begäranden behövs normalt bara när du ska uppdatera hundratusentals produkter samtidigt (med 1 000 åtgärder per begäran).
Vi har ingen fast gräns för begärandefrekvensen. Brandväggen bedömer dussintals parametrar. Använd sunt förnuft.
Schemalagda begäranden:
Om du schemalägger regelbundna API-begäranden bör du lägga in en slumpmässig fördröjning så att de inte alltid skickas vid sekund 0 varje minut. Många kunder skickar samtidigt. När begärandena sprids över tid går svaren ofta snabbare och risken för timeout vid hög belastning minskar.
Alla tillgängliga API-åtgärder
Varje åtgärd nedan dokumenteras med parametrar och exempel på begäranden och svar. Navigeringen till vänster länkar direkt till varje åtgärd.
Produkter
| Åtgärd | Syfte |
|---|---|
| productCreate | Skapa en ny produkt |
| productEdit | Redigera en befintlig produkt |
| productCompetitors | Redigera konkurrent-URL:er för en produkt (utan att skriva över alla) |
| productCategories | Redigera kategorier för en eller flera produkter (utan att skriva över alla) |
| productRepricing | Koppla många produkter till en regel för automatisk prisjustering |
| productDelete | Radera en eller flera produkter |
| productGet | Hämta en produkt (och dess konkurrentdata) |
| productGetAll | Hämta alla produkter (och deras konkurrentdata) |
Kategorier
| Åtgärd | Syfte |
|---|---|
| categoryCreate | Skapa en ny kategori |
| categoryEdit | Redigera en befintlig kategori |
| categoryDelete | Radera en eller flera kategorier |
| categoryCopy | Kopiera/flytta produkter mellan kategorier |
| categoryGet | Hämta en kategori |
| categoryGetAll | Hämta alla kategorier |
Prislarm
| Åtgärd | Syfte |
|---|---|
| alertRecipientCreate | Skapa en ny aviseringsmottagare |
| alertRecipientEdit | Redigera en mottagare och/eller dess aviseringsregler |
| alertRecipientDelete | Radera en aviseringsmottagare |
| alertRuleEdit | Redigera en befintlig aviseringsregel för en mottagare |
| alertRuleCreate ? | Den åtgärden finns inte. Använd i stället alertRecipientEdit med en "rulesAdd"-array. |
| alertRuleDelete ? | Den åtgärden finns inte. Använd i stället alertRecipientEdit med en "rulesRemove"-array. |
| alertGetAll | Hämta alla aviseringsmottagare och deras regler |
Regler för automatisk prisjustering
| Åtgärd | Syfte |
|---|---|
| repricingCreate | Skapa en ny prisjusteringsregel |
| repricingEdit | Redigera en befintlig prisjusteringsregel |
| repricingDelete | Radera en prisjusteringsregel |
| repricingGetAll | Hämta alla prisjusteringsregler |
Kalkylblad
| Åtgärd | Syfte |
|---|---|
| spreadsheetDownload | Ladda ned ett kalkylblad |
| spreadsheetPresetEdit | Byt namn på/ta bort en kalkylbladsmall |
| spreadsheetAutoCreate | Skapa automatisk export av kalkylblad |
| spreadsheetAutoEdit | Redigera automatisk export av kalkylblad |
Konkurrenter och mer
| Åtgärd | Syfte |
|---|---|
| competitorDeleteAll | Ta bort en konkurrent från alla produkter eller kategorier |
| mathEdit | Ange/redigera prisberäkningar för en konkurrentdomän |
Produkter
productCreate - Skapa en ny produkt
{ "actions" : [
...
{
"a" : "productCreate",
"code" : "UNIQUE-REF-CODE", // 1 till högst 80 tecken ([a-z\d][a-z\d_-]{0,78}[a-z\d]); skiftlägesokänsligt (omvandlas till versaler).
"name" : "The Product Name", // 1 till högst 200 tecken.
"price" : 1234.90, // Var noga med kommatecken och punkt: Inget tusentalsavgränsare, och decimaltecknet måste vara punkt.
"currency" : "USD",
"cost" : 1234.90, // (valfritt)
"costCurrency" : "USD", // Krävs om "cost" anges.
"repricingRule" : "The Rule Name", // (valfritt) Kopplad prisjusteringsregel (tom sträng = inaktiverad, okänd regel = fel).
"myWebsite" : "https://...", // (valfritt) URL eller shopify:productId:variantId eller woocommerce:productId(:variationId).
"competitors" : ["https://...", "https://..."], // (valfritt)
"categories" : ["The Category 1", "The Category 2"], // (valfritt) Produktens kategorier (saknade kategorier skapas).
"comments" : "Some comments\nAnd another line", // (valfritt) Högst 1 000 UTF-8-tecken.
"custom_someFieldName1" : "Value of custom field", // (valfritt)
"custom_someFieldName2" : "Value of other\nCustom\tField", // (valfritt)
// Anpassade fält är avsedda för internt bruk. De kan exempelvis visas som kolumner vid export av kalkylblad.
// Högst 20 anpassade fält per produkt. Namnet får ha högst 40 bokstäver, siffror eller understreck (skiftlägeskänsligt; exklusive prefixet "custom_", alltså 47 totalt).
// Värdet får vara högst 500 byte (ofta, men inte alltid, samma antal tecken). Du kan ange ett tal (custom_varname:123),
// men API:et returnerar alltid en sträng (custom_varname:"123"). Konvertera värdet vid behov.
// Radera ett anpassat fält genom att sätta värdet till "". Det gäller productEdit, inte productCreate.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productCreate",
"ok" : 1,
"code" : "REF-CODE", // Slutlig kod i databasen (specialtecken i den skickade koden kan omvandlas).
},
...
]
}
productEdit - Redigera en befintlig produkt
{ "actions" : [
...
{
"a" : "productEdit",
"code" : "REF-CODE",
... // Använder samma parametrar som productCreate; alla är valfria.
"newCode" : "REF-CODE-RENAMED", // (valfritt)
"competitors" : ["https://...", "https://..."], // Om angivet SKRIVS ALLA befintliga konkurrent-URL:er ÖVER.
// Använd åtgärden productCompetitors om du bara vill lägga till eller ta bort konkurrenter i den befintliga listan.
"categories" : ["The Category 1", "The Category 2"], // Om angivet SKRIVS de nuvarande kategorierna ÖVER. Använd annars productCategories eller categoryEdit.
"custom_someFieldName" : "New value or empty to delete that custom field",
// Det får finnas högst 20 anpassade fält per produkt. Radera vid behov gamla fält genom att sätta värdet till "" innan du lägger till nya.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productEdit",
"ok" : 3, // Antal ändringar (t.ex. mitt pris + 2 konkurrent-URL:er = 3).
"code" : "REF-CODE", // Slutlig (ny) kod i databasen (specialtecken kan omvandlas).
},
...
]
}
productCompetitors - Redigera en produkts konkurrent-URL:er
{ "actions" : [
...
{
"a" : "productCompetitors",
"code" : "REF-CODE",
"competitorsAdd" : ["https://...", "https://..."], // (valfritt) Lägg till dessa konkurrent-URL:er i den befintliga listan.
"competitorsRemove" : ["https://...", "example.com/a0ff80...5f00", "example.net"], // (valfritt) Ta bort dessa konkurrenter. Varje element kan vara:
// > URL:en (inklusive eventuella hashtag-modifierare). Etiketter är valfria.
// > Konkurrentens "ref" (returneras av andra åtgärder: rotdomänen följd av en MD5-hash med 32 tecken).
// > Rotdomänen eller hela värdnamnet; alla konkurrent-URL:er från den domänen tas bort från produkten.
// OBS: "competitorsAdd" och "competitorsRemove" kan också vara strängar i stället för arrayer med ett element.
// Borttagning sker före tillägg, så att du kan ta bort en hel domän och sedan lägga till en URL från samma domän.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productCompetitors",
"ok" : 3, // Antal ändrade konkurrent-URL:er.
"competitorsAdded" : 2, // Antal konkurrent-URL:er som lagts till produkten.
"competitorsRemoved" : 1, // Antal konkurrent-URL:er som tagits bort från produkten.
// FEL:
// > Att lägga till en URL som redan finns ger INTE fel (ok = 0).
// > Att ta bort en fullständig URL eller URL-"ref" som INTE finns ger fel (ok = -1).
// > Att ta bort alla URL:er för en domän som INTE finns ger INTE fel (ok = 0).
},
...
]
}
productCategories - Redigera kategorier för en eller flera produkter
Det är samma funktion som gränssnittet använder när du går till All Products, markerar en eller flera produkter och klickar på Selected Products > Edit Categories. Där finns en mer detaljerad förklaring.
Du kan också titta på åtgärden categoryEdit för att välja den lösning som passar bäst.
{ "actions" : [
...
{
"a" : "productCategories",
"code" : "REF-CODE", // Skiftlägesokänslig (sträng), ELLER:
"code" : ["REF-CODE-1", "REF-CODE-2"], // Kan också vara en array med flera produkter (högst 100 000).
"categoriesRemove" : ["The Category 1", "The Category 2"], // (valfritt) Ta först bort från dessa kategorier.
"categoriesRemoveAll" : 1, // (valfritt) Ta först bort från alla kategorier (som i productEdit).
"deleteEmptyCategories" : 1, // Kategorier som blir tomma
// när produkter tas bort från dem raderas.
"categoriesAdd" : ["The Category 1", "The Category 2"], // (valfritt) Lägg sedan till i dessa kategorier (saknade kategorier skapas).
"categoriesAddClear" : 1, // (valfritt) Töm först kategorierna som produkterna ska läggas till i.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productCategories",
"ok" : 3, // Antal ändrade produkter.
},
...
]
}
productRepricing - Koppla många produkter till en prisjusteringsregel
Detta gör samma sak som åtgärden productEdit. Men eftersom varje begäran får innehålla högst 1 000 åtgärder skulle du behöva skicka 50 begäranden för att koppla 50 000 produkter till en viss regel. Det vore mycket långsammare.
Om du bara vill ändra några få produkter kan du i stället använda åtgärden productEdit.
{ "actions" : [
...
{
"a" : "productRepricing",
"repricingRule" : "The Rule Name", // Skiftlägesokänslig; "" (tom men angiven sträng) betyder ingen regel (inaktivera prisjustering).
"products" : ["REF-CODE-1", "REF-CODE-2"], // Skiftlägesokänslig (högst 100 000).
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productRepricing",
"ok" : 10, // Antal ändrade produkter.
// Om alla produkter redan använde regeln får du ok=0.
},
...
]
}
productDelete - Radera en eller flera produkter
Det är samma funktion som gränssnittet använder när du går till All Products, markerar en eller flera produkter och klickar på Selected Products > Delete.
{ "actions" : [
...
{
"a" : "productDelete",
"code" : "REF-CODE", // Skiftlägesokänslig (sträng), ELLER:
"code" : ["REF-CODE-1", "REF-CODE-2"], // Kan också vara en array för att radera flera produkter (högst 100 000).
"deleteEmptyCategories" : 1, // Kategorier som blir tomma
// till följd av att produkten/produkterna raderas kommer också att raderas.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productDelete",
"ok" : 2, // Antal produkter som raderats.
},
...
]
}
productGet - Hämta en produkt
{ "actions" : [
...
{
"a" : "productGet",
"code" : "REF-CODE", // Skiftlägesokänslig.
"currency" : "EUR", // (valfritt) Omvandla alla belopp till denna valuta i stället för produktprisets valuta.
"withStats" : 1, // (valfritt) Returnera statistikobjektet.
"noCompetitors" : 1, // (valfritt) Returnera inte konkurrent-arrayen (för att minska datamängden).
"noComments" : 1, // (valfritt) Returnera inte kommentarerna (...).
"withScreenshots" : 1, // (valfritt) Returnera URL:en till den senaste skärmbilden för varje konkurrent.
"sickMax" : 2, // (valfritt, standard 1) 0-3: Returnera bara konkurrent-URL:er med felnivå högst N.
},
...
] }
Returnerar all information om en produkt, inklusive konkurrenternas aktuella priser och lagersaldo.SVAR:
{
...
"actions" : [
...
{
"a" : "productGet",
"ok" : 1,
"code" : "REF-CODE",
"name" : "The Product Name",
"price" : 1234.90, // Ditt eget pris, alltid i ursprunglig valuta.
"currency" : "USD", // Ursprunglig valuta för "price".
"convCurrency" : "EUR", // Valuta för omräknade belopp (antingen angiven "currency" eller produktprisets valuta).
"priceConv" : 1234.90, // Ditt eget pris omräknat med "convCurrency", eller samma som "price".
"cost" : 1234.90,
"costCurrency" : "USD",
"costPriceConv" : 1234.90, // Din inköpskostnad omräknad till prisets "currency".
"costConv" : 1234.90, // Din inköpskostnad omräknad till "convCurrency".
"margin" : 10.5, // Procent (kan vara negativ).
"repricingRule" : "The Rule Name", // Dessa 3 variabler för automatisk prisjustering SAKNAS om automatisk prisjustering inte används.
"reprice" : 1234.90, // Aktuellt beräknat prisjusteringsbelopp baserat på repricingRule.
"repriceCurrency" : "USD", // Samma som "convCurrency", medtaget här för tydlighetens skull.
"myWebsite" : "https://...",
"created" : 1234567890, // Epoch-tidpunkt då produkten skapades.
"createdBy" : "SOMEUSER", // Användarnamn eller "API".
"edited" : 1234567890, // Epoch-tidpunkt för senaste redigering (om någon).
"editedBy" : "SOMEUSER", // Användarnamn eller "API".
"comments" : "Some comments\nAnd another line",
"commentsLast" : 1234567890, // Epoch-tidpunkt för senaste ändring av kommentarer (om någon).
"commentsLastBy" : "SOMEUSER", // Användarnamn eller "API".
"categories" : ["The Category 1", "The Category 2"],
"stats" : {
// Bara konkurrent-URL:er med felnivå 0 eller 1 ingår i statistiken, oavsett "sickMax".
// Alla belopp anges i "convCurrency", alltså antingen angiven "currency" eller produktens ursprungliga "currency".
// VARNING: Om inget belopp finns (t.ex. compIn* när ingen konkurrent har varan i lager) är värdet 0.
"rank" : 1.23, // Din placering efter pris (1 = ingen har lägre pris än du).
"rankIn" : 1.23, // Din placering bland konkurrenter som har varan i lager.
"compCount" : 3, // Antal konkurrenter med ett giltigt pris.
"compInCount" : 3, // Antal konkurrenter med varan i lager ...
"compOutCount" : 3, // Antal konkurrenter utan varan i lager ...
"compAvg" : 123.56, // Genomsnittet för alla konkurrenter.
"compAvgVsMe" : 123.56, // Skillnaden (i convCurrency) mellan ditt pris och konkurrenternas genomsnitt (negativ = du är billigare).
"compInAvg" : 123.56, // Genomsnitt för konkurrenter med varan i lager.
"compInAvgVsMe" : 123.56, // Samma som "compAvgVsMe", men bara för konkurrenter med varan i lager.
"compLowest" : 123.56, // Billigaste konkurrenten.
"compLowestVsMe" : 123.56, // Samma som "compAvgVsMe", men för den billigaste i stället för genomsnittet.
"compInLowest" : 123.56, // Billigaste konkurrenten med varan i lager.
"compInLowestVsMe" : 123.56, // Samma som "compInAvgVsMe", men ...
"compHighest" : 123.56, // Dyraste konkurrenten.
"compHighestVsMe" : 123.56, // Samma som "compAvgVsMe", men ...
"compInHighest" : 123.56, // Dyraste konkurrenten med varan i lager.
"compInHighestVsMe" : 123.56, // Samma som "compInAvgVsMe", men ...
},
"competitors" : [
// Array med konkurrenter (billigaste först), där varje konkurrent är ett objekt:
...
{
"url" : "https://...", // Innehåller eventuella hashtag-modifierare som du lagt till.
"ref" : "example.com/123abc...def",
// URL-referens (rotdomänen följd av en MD5-hash på 32 tecken). Så identifierar vi URL:er internt.
"domain" : "example.com", // Den här konkurrentens rotdomän.
"price" : 1234.90, // Senaste priset som hittats på webbplatsen (efter eventuella beräkningar enligt dina inställningar).
"currency" : "USD", // Valuta som hittats på webbplatsen.
"priceConv" : 1234.90, // Pris omräknat till "convCurrency".
"stock" : "5", // Lagersaldo (sträng): "A" = tillgänglig, "2" = 2 i lager, "0" = slut i lager, "" = okänt.
"salesWk" : 123, // Uppskattad försäljning per vecka (om tillgängligt; se frågetecknet på produktsidan för förklaring).
"screenshotURL" : "https://pricezag.com/.../screenshot.png",
// Om "withScreenshots": URL till den senaste skärmbilden (offentligt tillgänglig via denna långa URL, utan inloggning).
"confidence" : 98,
// Procentuell säkerhet för att vi hittat rätt pris (se förklaringen genom att klicka på (?) på produktsidan).
// Under 70 % (kan ändras) kallas "opålitligt" på plattformen och markeras med ett frågetecken vid priset.
// Detta är oberoende av felnivån. En URL kan ha fel även om vi säkert hittade rätt pris,
// eller fungera utan fel även om vi är osäkra på om vi hittade rätt pris på sidan.
"sick" : 0, // URL:ens felnivå från 0 till 3.
// 0: Senaste besöket lyckades (vi kunde nå sidan och hitta ett pris).
// 1: Senaste besöket misslyckades, men vi lyckades nyligen (helt normalt, inget att oroa sig för).
// 2: Vi har inte kunnat hämta ett giltigt pris på flera dagar.
// 3: Vi har inte kunnat hämta ett giltigt pris på flera veckor.
// OBS: "price" och "priceConv" finns bara för URL:er med felnivå 0 eller 1. Nivå 2 och 3 har inget pris.
},
...
],
"custom" : {
// Det här är dina anpassade fält. Öppna
// produktsidan i användargränssnittet och klicka på (?) vid CUSTOM FIELDS för en förklaring.
// Om det inte finns några saknas hela objektet "custom" i svaret.
"variable_1" : "value 1", // Värdena är alltid strängar, även när de i själva verket är tal,
"variable_2" : "value 2", // och tomma värden finns inte, eftersom de skulle ha raderat fältet.
...
}
},
...
]
}
productGetAll - Hämta alla produkter
{ "actions" : [
...
{
"a" : "productGetAll",
"currency" : "EUR", // (valfritt) Räkna om alla belopp till denna valuta i stället för varje produkts egen valuta.
"withStats" : 1, // (valfritt) Returnera statistikobjektet.
"noCompetitors" : 1, // (valfritt) Returnera inte konkurrent-arrayen (för att minska datamängden).
"noComments" : 1, // (valfritt) Returnera inte kommentarerna (...).
"withScreenshots" : 1, // (valfritt) Returnera URL:en till den senaste skärmbilden för varje konkurrent.
"sickMax" : 2, // (valfritt, standard 1) 0-3: Returnera bara konkurrent-URL:er med felnivå högst N.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "productGetAll",
"ok" : 10, // Totalt antal produkter.
"products" : [ // Array med produkter (alfanumerisk ordning efter referenskod), där varje produkt är ett objekt:
...
{ ... }, // Produktobjekt som i svaret från productGet ovan.
...
],
},
...
]
}
Du kan också använda åtgärden categoryGet.Kategorier
categoryCreate - Skapa en ny kategori
Till skillnad från åtgärder som accepterar både befintliga och nya kategorier (t.ex. productCreate) misslyckas denna åtgärd om kategorin redan finns.
{ "actions" : [
...
{
"a" : "categoryCreate",
"name" : "The New Category Name",
"name" : ["New Category 1", "New Category 2"], // Kan också vara en array.
"products" : ["REF-CODE-1", "REF-CODE-2"], // (valfritt) Lägg till dessa produkter i kategorierna när de skapas.
"comments" : "Some comments\nAnd another line", // (valfritt) Högst 1 000 UTF-8-tecken.
},
...
] }
categoryEdit - Redigera en befintlig kategori
{ "actions" : [
...
{
"a" : "categoryEdit",
"name" : "The Category Name", // Skiftlägesokänslig.
"newName" : "The Category Renamed", // (valfritt)
"products" : ["REF-CODE-1", "REF-CODE-2"], // (valfritt) Skriv över produktlistan.
"productsAdd" : ["REF-CODE-1", "REF-CODE-2"], // (valfritt) Lägg till dessa produkter i kategorin.
"productsRemove" : ["REF-CODE-3", "REF-CODE-4"], // (valfritt) Ta bort dessa produkter från kategorin (produkterna raderas INTE).
"comments" : "To overwrite the comments.", // (valfritt) Högst 1 000 UTF-8-tecken.
},
...
] }
Fälten "products", "productsAdd" och "productsRemove" gör samma sak: De ändrar vilka produkter som tillhör kategorin, men på olika sätt. Använd bara "products" : []SVAR:
{
...
"actions" : [
...
{
"a" : "categoryEdit",
"ok" : 5, // Antal genomförda ändringar.
// (Namnbyte och ändring av kommentarer räknas som en ändring vardera, liksom varje produkt som läggs till/tas bort).
"name" : "The Category Name", // Nytt namn om det ändrats, annars det gamla.
"productsCount" : 30, // Nytt antal produkter i kategorin (oavsett om antalet ändrats).
"productsAdded" : 2, // Antal produkter som lagts till kategorin.
"productsRemoved" : 2, // Antal produkter som tagits bort från kategorin.
},
...
]
}
categoryDelete - Radera en eller flera kategorier
{ "actions" : [
...
{
"a" : "categoryDelete",
"name" : "The Category Name", // Skiftlägesokänslig (sträng), ELLER:
"name" : ["Category 1", "Category 2"], // Kan också vara en array för att radera flera kategorier (högst 1 000).
"deleteProducts" : 1,
// Som standard raderas kategorin medan produkterna bara tas bort ur kategorin,
// men med deleteProducts raderas alla produkter i kategorin utan bekräftelse,
// och deras konkurrent-URL:er raderas också utan möjlighet att återställa dem!
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "categoryDelete",
"ok" : 2, // Antal raderade kategorier.
"productsCount" : 123, // Antal produkter som berörs av kategorin/kategorierna.
"productsDeleted" : 123, // Antal produkter som raderats till följd av "deleteProducts".
// OBS: En produkt som finns i flera av de angivna kategorierna räknas bara en gång.
},
...
]
}
categoryCopy - Kopiera/flytta produkter mellan kategorier
Ingen av inställningarna här raderar produkter; de flyttas bara mellan kategorier.
Det är samma funktion som gränssnittet använder när du går till Categories, markerar några kategorier och klickar på Selected Categories > Copy & More. Där finns en mer detaljerad förklaring.
{ "actions" : [
...
{
"a" : "categoryCopy",
"categoriesFrom" : ["Category 1", "Category 2"], // Hitta produkter i dessa kategorier (källan).
"removeMode" : "cat", // (valfritt) Ta bort motsvarande produkter från angivna "categoriesFrom".
"removeMode" : "all", // (valfritt) Ta bort motsvarande produkter från alla deras kategorier.
// Om removeMode utelämnas blir produkterna kvar i "categoriesFrom" samtidigt som de läggs till i "categoriesTo" (kopiering i stället för flyttning).
"deleteMode" : "cat", // (valfritt) Radera angivna "categoriesFrom" efter att produkterna kopierats.
"deleteMode" : "all", // (valfritt) Radera alla kategorier som dessa produkter tillhör.
// Om deleteMode utelämnas finns "categoriesFrom" kvar även efter att produkterna tagits bort med "removeMode".
"categoriesTo" : ["Another Category 1", "Another Category 2"],
// Lägg till alla matchande produkter i dessa målkategorier (saknade kategorier skapas).
"categoriesToClear" : 1, // (valfritt) Töm först kategorierna som produkterna ska läggas till i.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "categoryCopy",
"ok" : 3, // Antal ändrade kategorier (både källor och mål).
// "ok" är summan av categoriesModified + categoriesCreated + categoriesDeleted.
"categoriesModified" : 2, // Antal befintliga kategorier som ändrats (både källor och mål).
"categoriesCreated" : 1, // Antal nya kategorier som skapats.
"categoriesDeleted" : 0, // Antal kategorier som raderats till följd av "deleteMode".
"productsCount" : 123, // Antal produkter som matchar angivna "categoriesFrom".
// OBS: En produkt som finns i flera angivna "categoriesFrom" räknas bara en gång.
},
...
]
}
categoryGet - Hämta en kategori
{ "actions" : [
...
{
"a" : "categoryGet",
"name" : "The Category Name", // Skiftlägesokänslig.
"currency" : "EUR", // (KRÄVS om withStats eller withProducts) Valuta för statistiken.
"withStats" : 1, // Returnera även statistiken (långsammare).
"withProducts" : 1, // Returnera även produkterna i denna kategori (kan ge stora datamängder).
"noCompetitors" : 1, // Om withProducts, returnera inte konkurrent-arrayen (för att minska datamängden).
"noComments" : 1, // Om withProducts, returnera inte produktkommentarer (kategorikommentarer returneras fortfarande).
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "categoryGet",
"ok" : 1,
"name" : "The Category Name",
"created" : 1234567890, // Epoch-tidpunkt.
"createdBy" : "SOMEUSER", // Användarnamn eller "API".
"comments" : "Comments of this category",
"commentsLast" : 1234567890, // Epoch-tidpunkt för senaste ändring av kommentarer (om någon).
"commentsLastBy" : "SOMEUSER", // Användarnamn eller "API".
"productsCount" : 10, // Antal produkter i denna kategori.
"stats" : {
// Detta är statistiken från kategorisidan i gränssnittet och kolumnerna i kategorilistan.
// Välj dem som kolumner i kategorilistan och klicka på (?) för mer information.
// Alla belopp anges i den "currency" som du skickade i begäran.
// VARNING: Om inget belopp finns (t.ex. compIn* när ingen konkurrent har varan i lager) är värdet 0.
"priceAvg" : 123.45, // Genomsnittet av dina egna priser.
"costAvg" : 123.45, // Bara produkter med inköpskostnad ingår i detta genomsnitt.
"marginAvg" : 10.5, // Procent (kan vara negativ; bara produkter med inköpskostnad ingår).
"rankAvg" : 1.23, // Din genomsnittliga prisplacering (1 = ingen är billigare än du).
"rankInAvg" : 1.23, // Din genomsnittliga placering bland konkurrenter med varan i lager.
"productsCountComp" : 9, // Antal produkter med konkurrenter.
"productsCountCompIn" : 7, // Antal produkter med konkurrenter som har varan i lager.
"compAvg" : 123.56, // Genomsnitt av konkurrenternas genomsnittspriser.
"compAvgVsMe" : 123.56, // Genomsnittlig skillnad (i valutan) mellan ditt pris och konkurrenternas (negativ = du är billigare).
"compInAvg" : 123.56, // Samma som "compAvg", men bara konkurrenter med varan i lager.
"compInAvgVsMe" : 123.56, // Samma som "compAvgVsMe", men bara för konkurrenter med varan i lager.
"compLowest" : 123.56, // Samma som "compAvg", men genomsnittet av den billigaste konkurrenten för varje produkt.
"compLowestVsMe" : 123.56, // Samma som "compAvgVsMe", men ...
"compInLowest" : 123.56, // Samma som "compInAvg", men ...
"compInLowestVsMe" : 123.56, // Samma som "compInAvgVsMe", men ...
"compHighest" : 123.56, // Samma som "compAvg", men genomsnittet av den dyraste konkurrenten för varje produkt.
"compHighestVsMe" : 123.56, // Samma som "compAvgVsMe", men ...
"compInHighest" : 123.56, // Samma som "compInAvg", men ...
"compInHighestVsMe" : 123.56, // Samma som "compInAvgVsMe", men ...
},
"products" : [ // Array med produkter (alfanumerisk ordning efter referenskod), där varje produkt är ett objekt:
...
{ ... }, // Produktobjekt som i svaret från productGet.
...
],
},
...
]
}
categoryGetAll - Hämta alla kategorier
{ "actions" : [
...
{
"a" : "categoryGetAll",
"withStats" : 1, // Returnera även statistiken (långsammare).
"noComments" : 1, // Returnera inte kommentarer (för att minska datamängden).
"noProducts" : 1, // Returnera inte produkt-arrayen (...).
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "categoryGetAll",
"ok" : 10, // Totalt antal kategorier (längden på arrayen "categories").
"categories" : [ // Array med kategorier (alfabetisk ordning), där varje kategori är ett objekt:
...
{
"name" : "The Category Name",
"created" : 1234567890, // Epoch-tidpunkt.
"createdBy" : "SOMEUSER", // Användarnamn eller "API".
"comments" : "Comments of this category",
"commentsLast" : 1234567890, // Epoch-tidpunkt för senaste ändring av kommentarer (om någon).
"commentsLastBy" : "SOMEUSER", // Användarnamn eller "API".
"productsCount" : 2, // Antal produkter i denna kategori.
"products" : ["REF-CODE-1", "REF-CODE-2"], // Referenskoder för kategorins produkter (alfabetisk ordning), om inte noProducts=1.
"stats" : {
// Om "withStats", samma statistikobjekt som vid categoryGet ovan.
...
},
}
...
],
},
...
]
}
Prislarm
alertRecipientCreate - Skapa en ny aviseringsmottagare
Klicka på de gröna frågetecknen i ditt konto för mer information om varje fält.
{ "actions" : [
...
{
"a" : "alertRecipientCreate",
"email" : "john@example.net", // Kan också vara ett telefonnummer för SMS-aviseringar; se hjälpen i gränssnittet.
"name" : "john", // Ett enkelt visningsnamn (vanligen förnamn; skiftlägesokänsligt).
"maxFrequency" : 1800, // (valfritt, standard 7200) Se hjälpen i gränssnittet.
"simplify" : 0, // (valfritt, standard 1) Aktivera förenkling (se hjälpen i gränssnittet).
"sleepEnabled" : 1, // (valfritt) Aktivera viloperiod.
"sleepFrom" : "18:30", // (endast om sleepEnabled) 24-timmarsformat.
"sleepTo" : "07:00", // (endast om sleepEnabled) 24-timmarsformat.
"timezone" : "America/Los_Angeles", // (endast om sleepEnabled) Formatet är sökvägen till Linux-mapparna i /usr/share/zoneinfo.
// Mellanslag omvandlas till understreck.
// Leta upp din tidszon i formuläret [New Recipient] i gränssnittet så att namnet blir exakt rätt.
"status" : "hold", // (valfritt) Ange "hold" eller "disable". Alla andra värden (t.ex. "") innebär aktiv.
"rules" : [...], // (valfritt) Inledande aviseringsregler (array med regelobjekt), som "rulesAdd" i alertRecipientEdit nedan.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "alertRecipientCreate",
"ok" : 1,
},
...
]
}
alertRecipientEdit - Redigera en mottagare och/eller dess aviseringsregler
Klicka på de gröna frågetecknen i ditt konto för mer information om varje fält.
Variabeln "email" avgör vilken mottagare som uppdateras. Alla andra fält ändrar mottagarens inställningar.
{ "actions" : [
...
{
"a" : "alertRecipientEdit",
"email" : "john@example.net", // Nuvarande e-postadress eller telefonnummer (exakt samma format som returneras av alertGetAll).
"newEmail" : "john2@example.net", // (valfritt) Ny e-postadress eller nytt telefonnummer; se hjälpen i gränssnittet.
"name" : "john2", // (valfritt) Nytt namn.
"maxFrequency" : 1800, // (valfritt) Se hjälpen i gränssnittet.
"simplify" : 1, // (valfritt) Aktivera förenkling (se hjälpen i gränssnittet).
"sleepEnabled" : 1, // (valfritt) Aktivera viloperiod.
"sleepFrom" : "18:30", // (endast om sleepEnabled) 24-timmarsformat.
"sleepTo" : "07:00", // (endast om sleepEnabled) 24-timmarsformat.
"timezone" : "America/Los_Angeles", // (endast om sleepEnabled) Se alertRecipientCreate ovan.
"status" : "hold", // (valfritt) Ange "hold" eller "disable". Alla andra värden (t.ex. "") ger "active".
"rules" : [{ruleObject}, {ruleObject}], // (valfritt) Skriv över alla befintliga regler (tom array tar bort alla).
// Ange ingen "rules"-array om du vill behålla de befintliga reglerna.
"rulesAdd" : [ // (valfritt) Lägg till dessa regler i de befintliga.
...
{ // DETTA ÄR FORMATET FÖR ETT REGELOBJEKT:
"name" : "me_cross_avg", // Se Alerts > [Rules] > [+ New Rule] i gränssnittet och välj en regel för att se dess API-namn.
"disabled" : 1, // (valfritt) Det är sällan meningsfullt att skapa en inaktiverad regel, men alertRuleEdit kan använda detta fält.
"var_n" : 123.00, // En "X"-variabel blir "var_x",
"var_c" : "USD", // ... så dessa fält beror på vad regeln behöver,
"var_h" : 24, // ... och vissa regler har inga variabler alls.
"direction" : "both", // Eller "drop" eller "rise" om regeln har en riktning.
"categories" : ["The Category 1", "The Category 2"], // (valfritt) Tom eller utelämnad betyder ALLA PRODUKTER.
"ignoreOos" : 1, // (valfritt) Ignorera konkurrenter som saknar varan i lager (se gränssnittet).
"urlInclude" : "", // (valfritt, skiftlägesokänsligt).
"urlExclude" : "amazon", // (valfritt, skiftlägesokänsligt).
// "ruleNumber" identifierar varje regel (t.ex. för senare redigering eller radering).
// Du ser det i regelobjekten när du hämtar dem, men du kan inte ange det själv.
}
...
],
"rulesRemove" : [1,4,7], // (valfritt) "ruleNumber" för reglerna som ska tas bort.
// Du får detta "ruleNumber" från alertGetAll nedan.
// OBS: Använd "rules" = [] för att ta bort alla regler.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "alertRecipientEdit",
"ok" : 3, // Antal ändringar (variabler + regler som lagts till/tagits bort).
},
...
]
}
alertRecipientDelete - Radera en aviseringsmottagare
{ "actions" : [
...
{
"a" : "alertRecipientDelete",
"email" : "john@example.net", // Nuvarande e-postadress eller telefonnummer (exakt samma format som returneras av alertGetAll).
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "alertRecipientDelete",
"ok" : 1,
},
...
]
}
alertRuleEdit - Redigera en befintlig aviseringsregel för en mottagare
Använd i stället arrayen "rulesRemove" i åtgärden alertRecipientEdit för att ta bort en regel och "rulesAdd" i samma åtgärd för att lägga till en regel.
{ "actions" : [
...
{
"a" : "alertRuleEdit",
"email" : "john@example.net", // Mottagarens e-postadress eller telefonnummer (samma format som returneras av alertGetAll).
"ruleNumber" : 1, // Referensnumret för regeln som ska redigeras, som returneras av alertGetAll nedan.
"rule" : {
// Variabler i regeln som ska skrivas över; se "rulesAdd" i alertRecipientEdit ovan för REGELOBJEKTETS FORMAT.
"disabled" : 1, // Till exempel för att aktivera/inaktivera en regel,
"var_n" : 5, // eller en annan variabel, till exempel N, beroende på regeltypen.
...
},
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "alertRuleEdit",
"ok" : 1, // Antal ändrade variabler.
},
...
]
}
alertGetAll - Hämta alla aviseringsmottagare och deras regler
{ "actions" : [
...
{
"a" : "alertGetAll",
// Denna åtgärd har inga parametrar.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "alertGetAll",
"ok" : 3, // Antal mottagare (längden på arrayen "recipients").
"recipients" : [ // Array med alla mottagare, där varje mottagare är ett objekt som i alertRecipientCreate ovan.
...
{
"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 med regler, där varje regel är ett objekt som beskrivs i alertRecipientEdit ovan.
...
{
"ruleNumber" : 4, // Referensnummer för redigering av regeln med alertRuleEdit ovan.
"name" : "me_cross_avg",
"disabled" : 0,
"var_n" : "123.00", // OBS: Alla variabler returneras som strängar, även när de är tal.
"var_c" : "USD",
"var_h" : "24",
"direction" : "both",
"categories" : [], // Tom betyder alla produkter.
"ignoreOos" : 0,
"urlInclude" : "",
"urlExclude" : "amazon",
}
...
],
}
...
],
},
...
]
}
Regler för automatisk prisjustering
repricingCreate - Skapa en ny prisjusteringsregel
Klicka på de gröna frågetecknen i ditt konto för mer information om varje fält.
Men hur kopplar du produkter till regeln? Genom att redigera produkterna med åtgärden productEdit eller productRepricing. En regel "äger" inte produkter; det är produkterna som pekar på en viss regel.
{ "actions" : [
...
{
"a" : "repricingCreate",
"name" : "The Rule Name", // Högst 50 tecken.
"init" : { // Objekt för reservstartvärdet (första raden med texten "Set my price to").
"target" : "cheapest_n", // (se listan nedan)
"var_n" : 3, // Endast om målet kräver en N-variabel.
"plusAmount" : -2, // Positiv för över, negativ för under.
"plusCurrency" : "%", // Valuta (t.ex. "USD") eller "%".
// Detta motsvarar "Sätt mitt pris 2 % under genomsnittet av de 3 billigaste konkurrenterna".
// VARNING: Till skillnad från "never"-objekten nedan har startvärdet ingen "direction". Det är tecknet på "plusAmount" som avgör över/under.
},
"never" : [ // (valfritt) "but never"-objekt som körs i ordning (högst 0-10).
{
"target" : "cheapest_n_in", // (se listan nedan)
"var_n" : 1, // Endast om målet kräver en N-variabel.
"direction" : "below", // Eller "above".
"plusAmount" : -10, // Positiv för plus, negativ för minus (krävs även vid 0).
"plusCurrency" : "USD", // Valuta eller "%" (krävs även om plusAmount=0).
// Detta motsvarar "Men aldrig under den billigaste konkurrenten med varan i lager minus 10,00 USD".
},
{
"target" : "cost",
"direction" : "below",
"plusAmount" : 5,
"plusCurrency" : "%",
// Detta motsvarar "Men aldrig under min inköpskostnad plus 5 %".
}
],
"ignoreDomains" : "amazon ebay.com MyLabel1", // (valfritt) Domäner och/eller etiketter som ska ignoreras bland konkurrenterna (skiftlägesokänsligt; se gränssnittet).
"charm" : "none|zeros|charm", // (valfritt, standard "none") Psykologisk prissättning ("", "none" och utelämnat betyder samma sak).
"confidence" : 82, // (valfritt, standard 70) Lägsta säkerhetsprocent 0-99 (se gränssnittet).
"disabled" : 1, // (valfritt)
},
...
] }
// ========== Alla tillgängliga "target"-strängar: ==========
// "average" : Genomsnitt av alla konkurrenter.
// "average_in" : Genomsnitt av alla konkurrenter med varan i lager.
// "cheapest_n" : Genomsnitt av de N billigaste konkurrenterna (eller "Den billigaste" om N=1).
// "cheapest_n_in" : Genomsnitt av de N billigaste konkurrenterna med varan i lager (eller ...).
// "highest_n" : Genomsnitt av de N dyraste konkurrenterna (eller ...).
// "highest_n_in" : Genomsnitt av de N dyraste konkurrenterna med varan i lager (eller ...).
// "cost" : Min inköpskostnad.
// "me_avg_n" : Mitt genomsnittspris under de senaste N timmarna (för att begränsa hur snabbt priset ändras).
// "domain:example.com" : Priset hos example.com (lägsta pris om det finns flera från samma domän).
// "domainIn:example.com" : Priset hos example.com, bara om varan finns i lager (...).
SVAR:{
...
"actions" : [
...
{
"a" : "repricingCreate",
"ok" : 3, // Antal objekt som tolkats och sparats korrekt (t.ex. init + never[0] + never[1] = 3).
"name" : "The Rule Name", // Slutligt namn i databasen (specialtecken kan omvandlas).
},
...
]
}
repricingEdit - Redigera en befintlig prisjusteringsregel
Se repricingCreate ovan för att förstå hur dessa variabler fungerar.
Detta ändrar själva regeln, inte produkterna som är kopplade till den. För att koppla produkter till regler måste du använda åtgärden productEdit eller productRepricing.
{ "actions" : [
...
{
"a" : "repricingEdit",
"name" : "The Rule Name", // Skiftlägesokänslig.
"newName" : "The Rule Renamed", // (valfritt) Högst 50 tecken.
"init" : { // (valfritt) Om angivet, skriv över en eller flera variabler i startvärdet (se repricingCreate).
"plusAmount" : 1, // Du kan till exempel ändra bara "plusAmount", medan de andra variablerna behåller sina värden.
// VARNING: Om det nya "target" kräver en N-variabel måste du ange "var_n".
},
"never" : [...], // (valfritt) Du kan skriva över hela "never"-arrayen, men oftast är det bättre att använda never_* nedan.
// "never":[] raderar alla befintliga villkor. Utelämna fältet för att behålla dem.
"never_0" : { // (valfritt) Skriv över det första "but never"-objektet (arrayindex 0).
"var_n" : 2, // Du kan till exempel ändra bara "var_n", medan de andra variablerna behåller sina värden.
},
"never_2" : {
"target" : "", // Detta inaktiverar det tredje "but never"-villkoret (arrayindex 2).
// Du behöver inte tänka på objektets andra variabler om "target" sätts till "".
// "never_2":{} gör samma sak.
},
"never_6" : {...}, // Detta kan vara ett nytt "but never"-villkor som du lägger till. Då krävs alla variabler som i repricingCreate.
// "never_9" är maxvärdet eftersom "never"-arrayen får innehålla upp till 10 element.
"ignoreDomains" : "", // (valfritt) Samma som repricingCreate.
"charm" : "zeros", // (valfritt) ...
"confidence" : 82, // (valfritt) ...
"disabled" : 1, // (valfritt) 0 för att aktivera en regel som är inaktiverad.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "repricingEdit",
"ok" : 3, // Antal ändringar (t.ex. en variabel i ett never_N-objekt + en i "init"-objektet + "charm").
"name" : "The Rule Name", // Slutligt (nytt) namn i databasen (specialtecken kan omvandlas).
},
...
]
}
repricingDelete - Radera en prisjusteringsregel
{ "actions" : [
...
{
"a" : "repricingDelete",
"name" : "The Rule Name", // Skiftlägesokänslig.
"onlyIfUnused" : 1, // (valfritt) För säkerhets skull kan du använda detta för att få ett fel om några produkter använder regeln.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "repricingDelete",
"ok" : 1,
"productsCount" : 10, // Antal produkter som använde regeln (och nu står utan).
},
...
]
}
repricingGetAll - Hämta alla prisjusteringsregler
{ "actions" : [
...
{
"a" : "repricingGetAll",
// Denna åtgärd har inga andra parametrar.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "repricingGetAll",
"ok" : 10, // Totalt antal regler (längden på "rules"-arrayen).
"rules" : [ // Array med prisjusteringsregler (alfabetisk ordning), där varje regel är ett objekt:
...
{
"name" : "Some Repricing Rule",
"created" : 1234567890, // Epoch-tidpunkt då regeln skapades.
"createdBy" : "SOMEUSER", // Användarnamn eller "API".
"edited" : 1234567890, // Tidpunkt för senaste redigering (om någon, annars saknas variabeln).
"editedBy" : "SOMEUSER", // Användarnamn eller "API" (eller utelämnat).
"disabled" : 1234567890, // Om regeln är inaktiverad: Epoch-tidpunkten då den senast inaktiverades. Annars utelämnat.
"disabledBy" : "SOMEUSER", // Användarnamn eller "API" (eller utelämnat).
"productsCount" : 10, // Antal produkter som för närvarande använder regeln.
"ignoreDomains" : "amazon ebay.com MyLabel1", // Domäner och/eller etiketter från konkurrenter som ignoreras (se gränssnittet).
"charm" : "charm", // Läge för psykologisk prissättning (none|zeros|charm).
"confidence" : 82, // Lägsta säkerhetsprocent 0-99 (se gränssnittet).
"init" : { // Objekt för reservstartvärdet (första raden med texten "Set my price to").
"target" : "cheapest_n", // (se listan under repricingCreate)
"var_n" : 3, // Om målet kräver en N-variabel, annars utelämnat.
"plusAmount" : -2, // Positiv för över, negativ för under.
"plusCurrency" : "%", // Valuta (t.ex. "USD") eller "%".
// Detta motsvarar "Sätt mitt pris 2 % under genomsnittet av de 3 billigaste konkurrenterna".
// VARNING: Till skillnad från "never"-objekten nedan har startvärdet ingen "direction". Det är tecknet på "plusAmount" som avgör över/under.
},
"never" : [ // "but never"-objekt som körs i ordning.
{
"target" : "cheapest_n_in",
"var_n" : 1,
"direction" : "below", // Eller "above".
"plusAmount" : -10, // Positiv för plus, negativ för minus.
"plusCurrency" : "USD", // Valuta eller "%".
// Detta motsvarar "Men aldrig under den billigaste konkurrenten med varan i lager minus 10,00 USD".
},
{}, // Det betyder att den andra raden med "But never"-villkor är tom.
{
"target" : "cost",
"direction" : "below",
"plusAmount" : 5,
"plusCurrency" : "%",
// Detta motsvarar "Men aldrig under min inköpskostnad plus 5 %".
}
],
}
...
],
},
...
]
}
Kalkylblad
spreadsheetDownload - Ladda ned ett kalkylblad
Detta motsvarar det du kan göra på sidan Export i ditt konto.
Se till att dina timeout-inställningarna är tillräckligt höga eftersom ett stort kalkylblad kan ta tid att generera.
GÖR DET ENKELT: Klicka på Show API equivalent på exportsidan för att skapa hela JSON-begäran (och curl-kommandot) utifrån de alternativ du valt i formuläret.
{ "actions" : [
{
"a" : "spreadsheetDownload",
"preset" : "Some Preset Name", // (valfritt) I stället för att ange allt nedan kan du använda en av dina eller våra mallar.
// För dina egna mallar ska detta vara hela namnet utan användarnamn före eller valuta efter.
// För våra standardmallar hittar du namnen genom att öppna menyn DIRECT DOWNLOAD på exportsidan och hålla muspekaren över dem.
// "pricezag_backup" är till exempel vår särskilda mall för säkerhetskopior (se "Special BACKUP format to re-import" under DIRECT DOWNLOAD).
// Du kan också ange andra variabler nedan som åsidosätter mallens vanliga inställningar (t.ex. valuta, format eller kategorier).
"savePreset" : "My New Preset Name", // (valfritt) Spara allt du anger nedan som en ny mall (som sedan kan användas både i gränssnittet och API:et).
// UNDANTAG FRÅN UNDANTAGET: Om du använder savePreset laddas inget kalkylblad ned; svaret blir i stället ett vanligt JSON-objekt.
"savePresetOverwrite" : 1, // (valfritt) Skriv över den befintliga mallen angiven i "savePreset" (annars returneras ett fel).
// VARNING: Överskrivning innebär att inget från den tidigare mallen behålls. Försök därför inte ändra bara ett fält.
// Använd spreadsheetPresetEdit nedan för att byta namn på eller radera en mall.
"downloadURL" : 1, // (valfritt) UNDANTAG FRÅN UNDANTAGET: I stället för filen returneras ett vanligt JSON-svar med "fileURL" i objektet,
// som är en offentlig URL till filen (ingen autentisering eller API-nyckel krävs). Filen kan laddas ned av vem som helst i 15 minuter.
// "ok" anger antal rader och "fileSize" visas i byte.
"format" : "xlsx|xls|csv|csv-tab", // (standard är csv för API:et)
"currency" : "USD", // (KRÄVS om ingen mall används) Valuta för ALLA belopp.
"categories" : ["Category 1", "Category 2"], // Ta bara med produkter från dessa kategorier (annars alla produkter).
"historyPeriod" : "prev_6mo", // (valfritt, standard "now")
// Klicka FÖRST på frågetecknen (?) på exportsidan om historikperioder; de förklarar inställningarna.
// "historyPeriod" bestämmer hur långt tillbaka vi hämtar belopp innan data delas upp i flera rader per produkt enligt "historyRow".
// "now": Ingen historik, bara aktuella data (och därmed ingen "historyRow").
// "all": Hela perioden vi har data för sedan registrering (eller åtminstone för de berörda produkterna). KAN VARA LÅNGSAMT.
// "1234500000-1237800000": En valfri period ("från-till" i epoch-tid).
// "123h": De senaste 123 timmarna. Ingen avrundning till tidsgränser; slutar nu och kan börja mitt i en klocktimme.
// "cur_123(d|wk|mo|yr)": De senaste 123 dagarna/veckorna/månaderna/åren inklusive den pågående ofullständiga perioden. "cur_2mo" hämtat den 10:e omfattar därför 40 dagar.
// "prev_123(d|wk|mo|yr)": De föregående 123 avslutade dagarna/veckorna/månaderna/åren. "prev_2mo" hämtat den 10 februari omfattar 62 dagar (december + januari).
// Starttiden för cur_* och prev_* (och sluttiden för prev_*) avrundas alltid till föregående midnatt, medan cur_* slutar nu.
// "cur_2d" hämtat kl. 12 omfattar därför de senaste 36 timmarna, medan "prev_2d" omfattar 48 timmar som slutade för 12 timmar sedan.
"historyRow" : "2w", // (krävs, men endast om "historyPeriod" inte är "now")
// "historyRow" bestämmer hur lång period varje rad representerar (genomsnitt för perioden), och ger därmed flera rader per produkt (utom "all").
// Se "historyRow" som UPPDELNINGEN av "historyPeriod" i enskilda kalkylbladsrader för varje produkt.
// "all": Genomsnitt över hela historyPeriod i en rad per produkt.
// "123(d|wk|mo|qt|yr)": Dela in från midnatt i intervaller om 123 kalenderdagar/veckor/månader/kvartal/år. 123 kan utelämnas om det är 1 ("wk" i stället för "1wk").
// Om du hämtar på lördag med historyRow:"7d" blir varje rad genomsnittet från lördag kl. 00:00 till fredag kl. 23:59.
// Med historyRow:"1wk" blir varje rad i stället genomsnittet för måndag 00:00 till söndag 23:59; senaste raden är den ofullständiga veckan mån-lör.
// ▶ GRÄNS PÅ 500 000 RADER: Både gränssnittet och API:et avvisar historikinställningar som ger fler än 500 000 rader.
// Det kan lätt ske med historyRow:"day" om historyPeriod täcker många dagar, t.ex. 365 dagar x 1 400 produkter.
// Om du verkligen behöver detta, ladda ned ett kalkylblad per kategori med några hundra produkter åt gången.
"timezone" : "America/Los_Angeles", // (valfritt, standard "UTC") Formatet är sökvägen till Linux-mapparna i /usr/share/zoneinfo.
// Mellanslag omvandlas till understreck.
// En tidszon behövs bara om dina history*-inställningar använder kalenderbaserade perioder (för att bestämma midnatt).
// Gränssnittet använder den aktuella användarens tidszon från inställningarna. API:et har ingen sådan inställning, så du måste ange den i begäran.
// ========== KOLUMNER: ==========
// Variablerna column* bestämmer kalkylbladets kolumner (se formuläret på exportsidan för förklaring av varje kolumn).
// Alla är 0 som standard (kolumnen tas inte med), förutom Code.
"columnCode" : 1, // (Denna kan inte tas bort; det finns alltid en kolumn med varje produkts REF-CODE).
"columnName" : 1, // Produktnamn.
"columnCategories" : 1, // Kategorier som produkten tillhör ("Category 1; Category 2" i en cell).
"columnComments" : 1, // Produktkommentarer.
"columnCreated" : 1, // Produktens skapandedatum YYYY/MM/DD (i vårt system).
"columnCustom" : 1, // Produkternas anpassade fält (en kolumn per unik variabel bland alla produkter).
"columnPrice" : 1, // Produktpris i den begärda valutan (INTE produktens egen valuta).
"columnCost" : 1, // Produktens inköpskostnad (i ...).
"columnMargin" : 1, // Produktens marginal i procent baserat på pris och inköpskostnad.
"columnRank" : 1, // Min prisplacering.
"columnInRank" : 1, // Min prisplacering bland varor i lager.
"columnMyWebsite" : 1, // URL till min egen webbplats.
"columnReprice" : 1, // Beräknat prisjusteringsbelopp (i ...).
"columnRepricingRule" : 1, // Namn på prisjusteringsregel.
"columnRecommended" : 1, // Rekommenderat pris (se hjälpen på exportsidan).
"columnCompUrls" : 1, // Konkurrent-URL:er (en per kolumn).
"columnCompUrlsJoin" : 1, // Konkurrent-URL:er (separerade med mellanslag i en cell).
"columnCompMinMaxAvg" : 1, // Lägger till 3 kolumner: konkurrenternas minimum/maximum/genomsnitt.
"columnInCompMinMaxAvg" : 1, // Lägger till 3 kolumner: minimum/maximum/genomsnitt för konkurrenter MED VARAN I LAGER.
"columnCompPrice" : 1, // Lägger till en kolumn per konkurrent med dess pris (i ...).
"columnCompStock" : 1, // Lägger till en kolumn per konkurrent med lagersaldo (123|IN|OUT).
"columnCompSales" : 1, // Lägger till en kolumn per konkurrent med försäljning per vecka.
"columnCompRank" : 1, // Lägger till en kolumn per konkurrent med dess placering bland alla (inklusive dig).
"columnCompInRank" : 1, // Lägger till en kolumn per konkurrent med dess placering bland konkurrenter med varan i lager (inklusive dig).
// ========== DOLDA AVANCERADE PARAMETRAR: ==========
// Det finns också några odokumenterade alternativ som bland annat används av vår mall "pricezag_backup".
"originalCurrencies" : 1, // I stället för att räkna om belopp till angiven valuta och få numeriska celler visas värdena som text med ursprunglig valuta ("123.90 USD").
"keepUrlLabels" : 1, // Normalt tar vi bort etiketterna från konkurrent-URL:er. Den här inställningen behåller dem (användbart för säkerhetskopior).
"csvSeparator" : ";", // Om CSV-formatet ska använda ett annat avgränsningstecken än kommatecken eller tabb.
"csvNoQuote" : 1, // Förhindra att CSV använder citattecken ("). Detta kan göra formatet ogiltigt.
}
] }
// Ett enkelt sätt att ladda ned en CSV-säkerhetskopia är:
// 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 - Byt namn på eller radera en kalkylbladsmall
Här kan du bara BYTA NAMN PÅ eller RADERA en mall. Använd åtgärden spreadsheetDownload ovan om du vill skapa en ny mall eller ändra en befintlig.
{ "actions" : [
{
"a" : "spreadsheetPresetEdit",
"preset" : "Some Preset Name", // Mallens nuvarande namn.
"newName" : "The Renamed Preset", // För att byta namn på denna mall.
"delete" : 1, // Detta raderar mallen "preset" från ditt konto.
// OBS: Du kan inte radera en mall som används för automatisk export (ger fel).
// Du måste först radera de schemalagda automatiska exporterna (se exportsidan).
}
] }
SVAR:{
...
"actions" : [
...
{
"a" : "spreadsheetPresetEdit",
"ok" : 1,
},
...
]
}
spreadsheetAutoCreate - Skapa en ny automatisk kalkylbladsexport
{ "actions" : [
{
"a" : "spreadsheetAutoCreate",
"preset" : "The Preset Name",
"email" : "john@example.net",
"currency" : "USD", // (valfritt) Standard är "preset", som använder mallens valuta.
"attach" : "link", // (valfritt, standard "attach") "attach" för bifogad fil eller "link" för direktlänk till en lagrad fil.
"everyMonday" : 1, // Skicka kalkylbladet varje måndag.
"everyTuesday" : 1, // ... (och motsvarande för varje veckodag fram till "everySunday").
"everyMonthDay1" : 15, // Skicka den 15:e varje månad.
"everyMonthDay2" : 21, // ... och även den 21:a.
"everyMonthDay3" : "last", // ... och även den sista dagen i varje månad.
// everyMonthDay* kan vara från 0 till 9, alltså högst 10 dagar per månad.
"time" : "3:59pm", // "15.59" fungerar också och omvandlas till "3:59pm". "0:9", "0.09", "00:09" och "0:09am" fungerar likadant.
"timezone" : "America/Los_Angeles", // (valfritt, standard "UTC") Formatet är sökvägen till Linux-mapparna i /usr/share/zoneinfo.
// Mellanslag i stadsnamn omvandlas till understreck.
}
] }
SVAR:{
...
"actions" : [
...
{
"a" : "spreadsheetAutoCreate",
"ok" : 1,
"id" : "5gwi6fqa", // Referensnummer för denna automatiska export för senare redigering (se spreadsheetAutoEdit nedan).
},
...
]
}
spreadsheetAutoEdit - Redigera en automatisk kalkylbladsexport
{ "actions" : [
{
"a" : "spreadsheetAutoEdit",
"id" : "5gwi6fqa", // Referensnummer för den automatiska export som ska redigeras.
// Du får ID:t i svaret från spreadsheetAutoCreate, men kan också se det i popupfönstrets rubrik när du klickar på Edit för en automatisk export.
"disabled" : 1, // (valfritt) 0 för att aktivera en inaktiverad automatisk export.
"delete" : 1, // (valfritt) Radera denna automatiska export helt.
// ===== Följande fält (alla valfria) är samma som i spreadsheetAutoCreate ovan =====
"preset" : "The Preset Name",
"email" : "john@example.net",
"currency" : "USD",
"attach" : "link",
"everyMonday" : 1, // VARNING: Om du anger minst en every*-variabel raderas ALLA befintliga every*-variabler.
"everyMonthDay1" : 15, // Om "everyFriday"=1 före ändringen kommer alltså "everyMonthDay3" att ta bort denna "everyFriday".
// ... och så vidare (se spreadsheetAutoCreate för alla every*-variabler).
"time" : "3:59pm",
"timezone" : "America/Los_Angeles",
}
] }
SVAR:{
...
"actions" : [
...
{
"a" : "spreadsheetAutoEdit",
"ok" : 3, // Antal genomförda ändringar.
},
...
]
}
Konkurrenter och mer
competitorDeleteAll - Ta bort en konkurrent från alla produkter eller kategorier
VARNING: Konkurrent-URL:erna raderas omedelbart och permanent från ditt konto och kan inte återställas.
Detta är samma funktion som användargränssnittet använder när du öppnar en konkurrents sida och klickar på Delete from all Products eller öppnar en kategorisida och klickar på (X)-ikonen i listan över konkurrenter.
{ "actions" : [
...
{
"a" : "competitorDeleteAll",
"domain" : "competitordomain.com",
"categories" : ["The Category 1", "The Category 2"], // (valfritt) Om utelämnat måste du använda "allProducts" = 1.
"allProducts" : 1, // (valfritt) Ta bort från alla produkter ("categories" får INTE anges).
// Använd antingen "categories" eller "allProducts", inte båda och inte inget av dem.
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "competitorDeleteAll",
"ok" : 10, // Antal raderade URL:er.
},
...
]
}
mathEdit - Ange/redigera prisberäkningar för en konkurrentdomän
Klicka på de gröna frågetecknen i ditt konto för mer information om varje fält.
{ "actions" : [
...
{
"a" : "mathEdit",
"domain" : "competitordomain.com",
"clear" : 1, // (valfritt) Inaktivera alla beräkningar för domänen (raderar alla tidigare inställningar).
// Om clear:1 anges får du inte ange något annat nedan, eftersom det ger ett fel.
"math" : [ // Array med beräkningsblock som ska användas.
{ // Detta är ett beräkningsblocksobjekt, och alla fält är valfria.
"categories" : ["Category 1", "Category 2"], // Bara för produkter från dessa kategorier.
"theirPriceMin" : 1234.90, // Bara när deras pris är större än eller lika med N.
"theirPriceMinCurrency" : "USD", // Valuta ("original" betyder samma valuta som på webbplatsen).
"theirPriceMax" : 1234.90, // ... mindre än eller lika med N.
"theirPriceMaxCurrency" : "USD", // Valuta (...).
"themMeMin" : -20.00, // Bara när [dem-mig] är större än eller lika med N (se gränssnittet).
"themMeMinCurrency" : "USD", // Valuta eller "%" av ditt eget pris (INTE "original" här).
"themMeMax" : -1.5, // ... mindre än eller lika med N.
"themMeMaxCurrency" : "%", // Valuta (...).
"addPre" : -10.00, // Belopp som läggs till före multiplikation (eller dras av om negativt).
"addPreCurrency" : "USD", // Valuta ("original" betyder samma valuta som på webbplatsen).
"multiply" : 1.1, // Multiplicera med denna faktor.
"divide" : 1.1, // ELLER dividera (ange inte båda).
"addPost" : 5.00, // Belopp som läggs till efter multiplikation (eller dras av om negativt).
"addPostCurrency" : "USD", // Valuta (...).
// Känns det överväldigande? Se vårt enkla exempel efter svaret.
},
... // Högst 10 block totalt (beräkningarna utförs i ordning).
],
// OBS: Vi stöder inte ändring av bara en variabel eller ett beräkningsblock. Om du anger "math"-arrayen ersätts alla befintliga inställningar.
// OBS: Ett beräkningsblock utan multiplikation/division (saknas eller är 1) och utan addPre!=0 eller addPost!=0 ignoreras,
// och om alla block ignoreras motsvarar det att radera alla beräkningar med clear:1.
// Beräkningarna måste alltså faktiskt ändra något för att sparas.
// TIPS: Om du vill inaktivera beräkningarna för en domän tillfälligt utan att radera dem,
// kan du ange categories: ["Some Empty Existing Category"].
},
...
] }
SVAR:{
...
"actions" : [
...
{
"a" : "mathEdit",
"ok" : 3, // Antal ändrade beräkningsblock (borttagning/nollställning räknas som en ändring).
},
...
]
}
ENKELT EXEMPEL - Ta bort 10 % skatt från alla priser på amazon.co.uk:{ "actions" : [
{
"a" : "mathEdit",
"domain" : "amazon.co.uk",
"math" : [
{
"divide" : 1.1
}
]
}
] }
Fler exempel
▶ EXEMPEL 1 - Uppdatera en produkts inköpspris
BEGÄRAN:
{
"actions" : [
{
"a" : "productEdit",
"code" : "SKU-1234",
"cost" : 140.50,
"costCurrency" : "EUR"
}
]
}
SVAR:{
"ok" : 1, // Returnerar 0 om SKU-1234 redan hade den inköpskostnaden.
"errors" : 0, // Returnerar 1 om SKU-1234 inte fanns.
"actionsCount" : 1,
"actions" : [
{
"a" : "productEdit",
"ok" : 1 // Returnerar 0 om SKU-1234 redan hade den inköpskostnaden och -1 om produkten inte fanns.
}
]
}
▶ EXEMPEL 2 - Hämta en produkt som inte finns
BEGÄRAN:
{
"actions" : [
{
"a" : "productGet",
"code" : "NON-EXISTING-SKU",
"currency" : "USD"
}
}
SVAR:{
"ok" : 0, // eftersom ingen åtgärd returnerade ok>0.
"errors" : 1, // eftersom en åtgärd returnerade ok<0.
"actionsCount" : 1,
"actions" : [
{
"a" : "productGet",
"ok" : -1, // Så ser du att åtgärden misslyckades.
"error" : "Sorry, the product #NON-EXISTING-SKU does not exist. Maybe someone else just removed or renamed it?"
}
]
}
▶ EXEMPEL 3 - Skapa en kategori, en prisjusteringsregel och sedan två produkter som kopplas till dem
BEGÄRAN:
{
"actions" : [
{
"a" : "categoryCreate",
"name" : "My New Category"
},
{
"a" : "repricingCreate",
"name" : "My New Repricing Rule",
"init" : {
"target" : "cheapest_n",
"var_n" : 2,
"plusAmount" : 0,
"plusCurrency" : "%"
// Detta motsvarar "Sätt mitt pris mitt emellan de 2 billigaste konkurrenterna".
},
"never" : [
{
"target" : "cost",
"direction" : "below",
"plusAmount" : 5,
"plusCurrency" : "%"
// Detta motsvarar "Men aldrig under min inköpskostnad + 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", // Samma regelnamn som vi just skapade.
"categories" : ["My New Category"], // Samma kategorinamn som vi just skapade.
// ... även om productCreate ändå skapar saknade kategorier, så categoryCreate var inte nödvändigt.
"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://..."]
}
]
}
SVAR:{
"ok" : 4, // eftersom alla 4 åtgärderna returnerade ok>0.
"errors" : 0, // eftersom ingen åtgärd returnerade ok<0.
"actionsCount" : 4,
"actions" : [
{
"a" : "categoryCreate",
"ok" : 1
},
{
"a" : "repricingCreate",
"ok" : 1
},
{
"a" : "productCreate",
"ok" : 1
},
{
"a" : "productCreate",
"ok" : 1
}
]
}
▶ EXEMPEL 4 - Slå ihop två kategorier till en annan och radera de två ursprungliga kategorierna
BEGÄRAN:
{
"actions" : [
{
"a" : "categoryCopy",
"categoriesFrom" : ["Original Category 1", "Original Category 2"],
"deleteMode" : "cat",
// Observera att "removeMode":"cat" inte behövs eftersom deleteMode ändå raderar de två kategorierna.
"categoriesTo" : ["A New Category"]
}
}
SVAR:{
"ok" : 1, // eftersom en åtgärd returnerade ok>0.
"errors" : 0, // eftersom ingen åtgärd returnerade ok<0.
"actionsCount" : 1,
"actions" : [
{
"a" : "categoryCopy",
"ok" : 3, // eftersom 3 kategorier ändrades: de två ursprungliga raderades och en målkategori skapades.
"categoriesCreated" : 1,
"categoriesDeleted" : 2,
"categoriesModified" : 0,
"productsCount" : 123
}
]
}
▶ EXEMPEL 5 - Ändra N-variabeln och riktningen för en aviseringsregel
BEGÄRAN:
{
"actions" : [
{
"a" : "alertRuleEdit",
"email" : "john@example.net",
"ruleNumber" : 3,
"rule" : {
"var_n" : 1.5,
"direction" : "drop"
}
}
}
SVAR:{
"ok" : 1, // eftersom en åtgärd returnerade ok>0.
"errors" : 0, // eftersom ingen åtgärd returnerade ok<0.
"actionsCount" : 1,
"actions" : [
{
"a" : "alertRuleEdit",
"ok" : 2 // eftersom 2 variabler ändrades korrekt.
}
]
}
