PriceZag API - Forbind prisdata med dine systemer

Brug PriceZags JSON API til at hente konkurrenters priser og lagerstatus, administrere produkter og regler for automatisk prisjustering, downloade rapporter og automatisere dine arbejdsgange.

Hurtigt eksempel med curl

Vi ved, at udviklere gerne vil se kode, der virker, først. Disse kommandoer opretter et testprodukt og henter det derefter. Erstat MYAPIKEY med din kontos API-nøgle (se API-nøgle).
Opret et 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"}]}'
(hvis du kører kommandoen igen, får du en fejl, fordi produktet allerede findes)
Nu kan du hente produktet igen:
curl -X POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"productGet","code":"000-SOME-TEST-PRODUCT"}]}' | python -mjson.tool
(fjern | python -mjson.tool hvis du ikke har værktøjet til at formatere JSON-svaret i din terminal)

Oversigt

Hvad du kan gøre med PriceZag API

Med PriceZags JSON API kan dine scripts og forretningssystemer arbejde direkte med de konkurrentpriser og lagerdata, vi overvåger. Hent produktdata, administrer produkter og kategorier, beregn beløb ud fra regler for automatisk prisjustering, opsæt alarmer, og download tilpassede regneark. API'et kan bruges med enhver e-handelsplatform eller ethvert programmeringssprog, der kan sende HTTPS-anmodninger og behandle JSON.

Du kan også bede din foretrukne AI-assistent om at skrive scripts for dig. Giv den URL'en til denne dokumentation (https://pricezag.com/integrations/api), forklar, hvad du vil automatisere, og oplys, hvilket programmeringssprog eller hvilken e-handelsplatform du bruger. Hold din API-nøgle privat - indsæt den ikke i en AI-samtale.

PriceZag står selv for overvågningen på vores platform, så API'et er valgfrit. Det er nyttigt, når du vil forbinde dine egne systemer med disse data. Shopify og WooCommerce har også direkte integrationer.

API-nøgle og tilladelser

Åbn Automation > API i din PriceZag-konto. Klik på Reveal the current API key for at se din nuværende nøgle, eller Change the API key for at udskifte den. Begge handlinger kræver din kontoadgangskode. Din bruger skal have de relevante tilladelser til at se eller oprette API-nøgler. Kontakt en kontoadministrator, hvis du mangler disse tilladelser.

Hold API-nøglen hemmelig. Den kan give adgang til omfattende ændringer af kontodata, herunder sletning. Gem ikke nøglen i offentlige kodearkiver, kode, der kører i browseren, eller AI-samtaler. Hvis nogen skal hjælpe dig med en integration, så opret en PriceZag-bruger til vedkommende med de nødvendige tilladelser, og skift API-nøglen, når det er relevant.

API-adgang afhænger af dit abonnement. Med fuld API-adgang kan dine scripts arbejde med alle dine produkter. Uden fuld adgang kan API'et kun tilgå de første 10 produkter sorteret alfanumerisk efter referencekode. Har du for eksempel 1.000 produkter med koder fra SKU0001 til SKU1000, kan API'et tilgå SKU0001 til og med SKU0010. Den 14-dages gratis prøveperiode omfatter fuld API-adgang. Du kan også aktivere fuld API-adgang som en tilføjelse til dit abonnement.

API-aktivitetslog og seneste anmodning

Siden Automation > API på din konto viser tidspunktet for den seneste API-anmodning og har knappen API Activity Log. Tjek disse oplysninger, hvis et script ikke virker: Du kan se, om anmodningerne nåede PriceZag, og undersøge fejl eller uventede ændringer.

Ændringer foretaget via API'et vises også i History of Edits i hele din konto under brugernavnet API. For eksempel kan et produkts ændringshistorik vise Price edited by API i stedet for Price edited by JOHN. PriceZag understøtter flere brugere på samme konto, så du kan skelne automatiserede ændringer fra dem, som teammedlemmer foretager.

Anmodnings-URL og metoder

Alle API-anmodninger bruger samme HTTPS-URL. Send POST-anmodninger til den, og erstat MYAPIKEY med din nøgle:

https://pricezag.com/api/v3/MYAPIKEY

Det, du vil gøre med API'et ("actions"), og parametrene hører til i JSON-anmodningens indhold, ikke i URL'en.
Send et JSON-objekt med en eller flere handlinger i POST-indholdet. URL'en er den samme, uanset om du henter et produkt, opdaterer priser eller downloader et regneark.

Kan du ikke sende POST?
Som sidste udvej kan du sende en GET-anmodning med JSON-indholdet Base64-kodet i ?data=-URL-parameteren. URL'er har længdebegrænsninger, så POST anbefales klart.

Sådan fungerer handlinger

Det, vi kalder en handling, er en operation på din konto, f.eks. at redigere et produktfelt, ændre en regel for automatisk prisjustering eller hente priserne fra alle konkurrenter for et produkt.
Vores API og brugergrænseflade (UI) udfører de samme funktioner i vores backend, så næsten alle handlinger i brugergrænsefladen kan også udføres via API'et.
Når du sender en API-anmodning, indeholder dine JSON-data et array med alle de handlinger, du vil udføre, fra 1 til højst 1.000 pr. anmodning. Du kan f.eks. omdøbe 3 produkter og oprette en ny kategori i én anmodning med 4 handlinger. Du kan også hente data for 1.000 produkter på én gang med 1.000 "productGet"-handlinger.
Handlingerne udføres i arrayets rækkefølge. Hvis du først opretter en regel for automatisk prisjustering og derefter tildeler produkter til den, skal handlingerne stå i den rækkefølge, så reglen findes, når produkterne ændres.
Rul ned for at se listen over alle tilgængelige handlinger.

Dit JSON-anmodningsobjekt

Til scripts og AI-genereret kode: Referenceeksemplerne nedenfor indeholder //-kommentarer og ...-pladsholdere til at forklare felterne. De er kun illustrationer og ikke gyldig JSON, der kan sendes uændret. Fjern kommentarer og pladsholdere, før du sender en anmodning. De to curl-eksempler ovenfor indeholder gyldigt JSON-indhold.

Alle dine POST-data skal være ét JSON-objekt {...} med et array af handlinger, der skal udføres.
{
	"stopOnFailure"	: 1,  // (valgfri) Som standard fortsætter systemet til næste handling, selv om en handling fejler. Sæt til 1 for at stoppe ved fejl.

	// Array med alle handlinger:
	"actions" : [
		// Handling 1:
		{
			"a"	: "someActionName",  // Handlingsnavnet angives altid i feltet "a" i hvert handlingsobjekt.
			"xx"	: "some parameter this action needs"	// Alle andre felter er parametre, som den pågældende handling har brug for.
		},
		// Handling 2:
		{
			"a"	: "anotherActionName",
			"abc"	: "some parameter this action needs",
			"xyz"	: {"x":"some object this action needs", "y":5, "z":6}
		},
		// Handling 3:
		{
			"a"	: "aThirdAction",
			"xyz"	: ["some array this action needs", "..."]
		}
	]
}

Serversvar og HTTP-statuskoder

Ved fejl i anmodningens format, eller hvis kontoen f.eks. er deaktiveret, returnerer serveren text/plain med fejlmeddelelsen som tekst.
Hvis anmodningen er korrekt, modtager du normalt et JSON-objekt som svar, bortset fra enkelte handlinger, der udtrykkeligt er undtaget (f.eks. download af regneark). Du kan se det på svarheaderen Content-Type: application/json.
Vores HTTP-svarkode er:
► 200 når alle handlinger lykkedes (det neutrale resultat ok=0 regnes som succes)
► 406 når nogle handlinger lykkedes, mens andre mislykkedes.
► 422 når alle handlinger mislykkedes, men ikke af nedenstående årsager.
► 400 når det modtagne JSON-objekt ikke kunne afkodes.
► 403 når godkendelsen mislykkedes (typisk på grund af en forkert API-nøgle).
Du kan bruge disse statuskoder direkte i dine scripts. Har du brug for flere oplysninger, indeholder det returnerede JSON-objekt yderligere detaljer:
{
	"ok"		: 15,  // Antal handlinger, der lykkedes (handlingens ok>0).
	"errors"	: 0,  // Antal handlinger, der gav fejl (handlingens ok<0).
	"actionsCount"	: 20,  // Samlet antal oprindeligt anmodede handlinger (størrelsen af arrayet "actions").
	// BEMÆRK: Heraf kan vi udlede, at 5 handlinger returnerede ok=0 (ingen fejl, men heller ingen ændring).
	
	// Array med alle oprindeligt anmodede handlinger (i samme rækkefølge):
	"actions" : [
		...
		// Svarobjekt for hver handling:
		{
			"a"	: "someActionName",
			"ok"	: 4,		// Resultat: >0 = succes, 0 = ingen ændring, <0 = fejl.
						// 0 kan f.eks. forekomme, hvis du sætter en produktpris til dens nuværende værdi.
						// -1 kan forekomme, hvis produktet ikke findes.
						// Betydningen af >0 afhænger af handlingen. Ofte er det antallet af felter eller elementer, der faktisk blev ændret.
			"error"	: "...",  // Fejlmeddelelse, hvis ok < 0.
						// Vores fejlmeddelelser er meget detaljerede. Gem dem i en log,
						// da de indeholder det, du skal bruge for at forstå fejlen.
			...	// Andre data, som denne handling returnerer.
		},
		...
	]
}

Eksempler?

Nogle gange er det lettere at forstå med eksempler. Se flere eksempler helt nederst på denne side.

Anmodningsgrænser og planlægning

Vi har en firewall, der beskytter os og dig mod angreb og store mængder anmodninger. Hvis vores firewall blokerer en host, kan vores hjemmeside virke utilgængelig (ingen forbindelse, intet svar, intet ping).
For at undgå, at dine legitime anmodninger bliver blokeret:
► Brug aldrig en forkert API-nøgle; firewallen tolererer kun få forsøg med forkerte nøgler (det samme gælder forkerte adgangskoder på vores hjemmeside).
► Saml mange handlinger i én anmodning i samme JSON-objekt (højst 1.000). Hvis du vil oprette 1.000 produkter, skal du sende én anmodning, ikke 1.000.
► Hvis du er nødt til at sende mange anmodninger, så vent 500 ms mellem dem og genbrug den samme HTTPS-forbindelse. Det er en almindelig fejl at åbne en ny forbindelse for hver anmodning. Mange anmodninger er normalt kun nødvendige, hvis du skal opdatere hundredtusindvis af produkter på én gang (med 1.000 handlinger pr. anmodning).
Vi har ingen fast grænse for anmodningshastigheden. Vores firewall vurderer snesevis af parametre. Brug din sunde fornuft.
 
Planlagte anmodninger:
Hvis du planlægger regelmæssige API-anmodninger, skal du tilføje en tilfældig forsinkelse, så de ikke altid sendes ved sekund 0 i hvert minut. Mange kunder sender på nøjagtig samme tidspunkt. Når anmodningerne fordeles over tid, bliver svarene ofte hurtigere, og risikoen for timeout ved høj belastning mindskes.

Alle tilgængelige API-handlinger

Hver handling nedenfor er dokumenteret med parametre og eksempler på anmodninger og svar. Navigationen til venstre linker direkte til hver handling.

Produkter

HandlingFormål
productCreateOpret et nyt produkt
productEditRediger et eksisterende produkt
productCompetitorsRediger et produkts konkurrent-URL'er (uden at overskrive dem alle)
productCategoriesRediger kategorier for et eller flere produkter (uden at overskrive dem alle)
productRepricingKnyt mange produkter til en regel for automatisk prisjustering
productDeleteSlet et eller flere produkter
productGetHent et produkt (og dets konkurrentdata)
productGetAllHent alle produkter (og deres konkurrentdata)

Kategorier

HandlingFormål
categoryCreateOpret en ny kategori
categoryEditRediger en eksisterende kategori
categoryDeleteSlet en eller flere kategorier
categoryCopyKopier/flyt produkter mellem kategorier
categoryGetHent en kategori
categoryGetAllHent alle kategorier

Prisalarmer

HandlingFormål
alertRecipientCreateOpret en ny modtager af alarmer
alertRecipientEditRediger en modtager og/eller dennes alarmregler
alertRecipientDeleteSlet en modtager af alarmer
alertRuleEditRediger en eksisterende alarmregel for en modtager
alertRuleCreate ?Denne handling findes ikke. Brug i stedet alertRecipientEdit med et "rulesAdd"-array.
alertRuleDelete ?Denne handling findes ikke. Brug i stedet alertRecipientEdit med et "rulesRemove"-array.
alertGetAllHent alle alarmmodtagere og deres regler

Regler for automatisk prisjustering

HandlingFormål
repricingCreateOpret en ny prisjusteringsregel
repricingEditRediger en eksisterende prisjusteringsregel
repricingDeleteSlet en prisjusteringsregel
repricingGetAllHent alle prisjusteringsregler

Regneark

HandlingFormål
spreadsheetDownloadDownload et regneark
spreadsheetPresetEditOmdøb/slet en regnearksskabelon
spreadsheetAutoCreateOpret automatisk eksport af regneark
spreadsheetAutoEditRediger automatisk eksport af regneark

Konkurrenter og andet

HandlingFormål
competitorDeleteAllFjern en konkurrent fra alle produkter eller kategorier
mathEditAngiv/rediger prisberegninger for et konkurrentdomæne

Produkter

productCreate - Opret et nyt produkt

Dette er den samme funktion, som brugergrænsefladen bruger på siden New Product.
{ "actions" : [
	...
	{
		"a"		: "productCreate",
		"code"		: "UNIQUE-REF-CODE",  // 1 til højst 80 tegn ([a-z\d][a-z\d_-]{0,78}[a-z\d]); skelner ikke mellem store/små bogstaver (konverteres til store).
		"name"		: "The Product Name",  // 1 til højst 200 tegn.
		"price"		: 1234.90,  // Pas på komma og punktum: Intet tusindtalsseparator, og decimaltegnet skal være punktum.
		"currency"	: "USD",
		"cost"		: 1234.90,  // (valgfri)
		"costCurrency"	: "USD",  // Påkrævet, hvis "cost" er angivet.
		"repricingRule"	: "The Rule Name",  // (valgfri) Tilknyttet prisjusteringsregel (tom streng = deaktiveret, manglende regel = fejl).
		"myWebsite"	: "https://...",  // (valgfri) URL eller shopify:productId:variantId eller woocommerce:productId(:variationId).
		"competitors"	: ["https://...", "https://..."],  // (valgfri)
		"categories"	: ["The Category 1", "The Category 2"],  // (valgfri) Produktets kategorier (manglende kategorier oprettes).
		"comments"	: "Some comments\nAnd another line",  // (valgfri) Højst 1.000 UTF-8-tegn.
		"custom_someFieldName1"	: "Value of custom field",		// (valgfri)
		"custom_someFieldName2"	: "Value of other\nCustom\tField",  // (valgfri)
		// Brugerdefinerede felter er til internt brug. De kan f.eks. vises som kolonner ved eksport af regneark.
		// Højst 20 brugerdefinerede felter pr. produkt. Navnet må være højst 40 bogstaver, tal eller understregninger (store/små bogstaver skelnes; eksklusive præfikset "custom_", altså 47 i alt).
		// Værdien må højst være 500 byte (ofte, men ikke altid, det samme antal tegn). Du kan angive et tal (custom_varname:123),
		// men API'et returnerer altid en streng (custom_varname:"123"). Konverter selv værdien, hvis det er nødvendigt.
		// Slet et brugerdefineret felt ved at sætte værdien til "". Det gælder productEdit, ikke productCreate.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productCreate",
			"ok"	: 1,
			"code"	: "REF-CODE",  // Endelig kode i databasen (specialtegn i den indsendte kode kan blive konverteret).
		},
		...
	]
}

productEdit - Rediger et eksisterende produkt

Dette er samme funktion, som brugergrænsefladen bruger, når du redigerer et felt på produktsiden. Brugergrænsefladen sender ét felt ad gangen, mens API'et f.eks. kan ændre både navn og pris i samme anmodning.
{ "actions" : [
	...
	{
		"a"		: "productEdit",
		"code"		: "REF-CODE",
		...		// Bruger samme parametre som productCreate; alle er valgfrie.
		"newCode"	: "REF-CODE-RENAMED",  // (valgfri)
		"competitors"	: ["https://...", "https://..."],  // Hvis angivet, OVERSKRIVES ALLE eksisterende konkurrent-URL'er.
		// Brug handlingen productCompetitors, hvis du kun vil tilføje eller fjerne enkelte konkurrenter fra den eksisterende liste.
		"categories"	: ["The Category 1", "The Category 2"],  // Hvis angivet, OVERSKRIVES de nuværende kategorier. Brug ellers productCategories eller categoryEdit.
		"custom_someFieldName"	: "New value or empty to delete that custom field",
		// Der må højst være 20 brugerdefinerede felter pr. produkt. Slet om nødvendigt gamle felter med værdien "", før du tilføjer nye.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productEdit",
			"ok"	: 3,  // Antal ændringer (f.eks. min pris + 2 konkurrent-URL'er = 3).
			"code"	: "REF-CODE",  // Endelig (ny) kode i databasen (specialtegn kan blive konverteret).
		},
		...
	]
}

productCompetitors - Rediger et produkts konkurrent-URL'er

Rediger konkurrent-URL'erne for et produkt uden at overskrive dem alle (i modsætning til handlingen productEdit ).
{ "actions" : [
	...
	{
		"a"			: "productCompetitors",
		"code"			: "REF-CODE",
		"competitorsAdd"	: ["https://...", "https://..."],  // (valgfri) Tilføj disse konkurrent-URL'er til de eksisterende.
		"competitorsRemove"	: ["https://...", "example.com/a0ff80...5f00", "example.net"],  // (valgfri) Fjern disse konkurrenter. Hvert element kan være:
		// > URL'en (inklusive eventuelle hashtag-modifikatorer). Etiket er valgfri.
		// > Konkurrentens "ref" (returneret af andre handlinger: roddomænet efterfulgt af en MD5-hash på 32 tegn).
		// > Roddomænet eller hele værtsnavnet; alle konkurrent-URL'er fra dette domæne fjernes fra produktet.
		// BEMÆRK: "competitorsAdd" og "competitorsRemove" kan også være strenge i stedet for arrays med ét element.
		// Fjernelse sker før tilføjelse, så du kan fjerne et helt domæne og derefter tilføje en URL fra samme domæne.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "productCompetitors",
			"ok"			: 3,  // Antal ændrede konkurrent-URL'er.
			"competitorsAdded"	: 2,  // Antal konkurrent-URL'er tilføjet produktet.
			"competitorsRemoved"	: 1,  // Antal konkurrent-URL'er fjernet fra produktet.
			// FEJL:
			// > Tilføjelse af en URL, der allerede findes, giver IKKE en fejl (ok = 0).
			// > Fjernelse af en fuld URL eller URL-"ref", som IKKE findes, giver en fejl (ok = -1).
			// > Fjernelse af alle URL'er for et domæne, der IKKE findes, giver IKKE en fejl (ok = 0).
		},
		...
	]
}

productCategories - Rediger kategorier for et eller flere produkter

Rediger kategorierne for et eller flere produkter uden at overskrive dem alle (i modsætning til productEdit).
Det er samme funktion, som brugergrænsefladen bruger, når du går til All Products, vælger et eller flere produkter og klikker på Selected Products > Edit Categories. Du kan se en mere detaljeret forklaring der.
Du kan også se på handlingen categoryEdit for at vælge den løsning, der passer dig bedst.
{ "actions" : [
	...
	{
		"a"			: "productCategories",
		"code"			: "REF-CODE",  // Skelner ikke mellem store/små bogstaver (streng), ELLER:
		"code"			: ["REF-CODE-1", "REF-CODE-2"],  // Kan også være et array med flere produkter (højst 100.000).
		"categoriesRemove"	: ["The Category 1", "The Category 2"],  // (valgfri) Fjern først fra disse kategorier.
		"categoriesRemoveAll"	: 1,  // (valgfri) Fjern først fra alle kategorier (som i productEdit).
		"deleteEmptyCategories"	: 1,  // Kategorier, der bliver tomme
		// som følge af, at produkter fjernes fra dem, bliver slettet.
		"categoriesAdd"		: ["The Category 1", "The Category 2"],  // (valgfri) Tilføj derefter til disse kategorier (manglende kategorier oprettes).
		"categoriesAddClear"	: 1,  // (valgfri) Tøm først disse kategorier, som produkterne skal tilføjes til.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productCategories",
			"ok"	: 3,  // Antal ændrede produkter.
		},
		...
	]
}

productRepricing - Knyt mange produkter til en prisjusteringsregel

Knyt op til 100.000 produkter til én regel for automatisk prisjustering.
Dette gør det samme som handlingen productEdit. Men da hver anmodning højst må indeholde 1.000 handlinger, skulle du sende 50 anmodninger for at knytte 50.000 produkter til en bestemt regel. Det ville være meget langsommere.
Hvis du kun vil ændre få produkter, kan du i stedet bruge handlingen productEdit.
{ "actions" : [
	...
	{
		"a"			: "productRepricing",
		"repricingRule"		: "The Rule Name",  // Skelner ikke mellem store/små bogstaver; "" (tom, men eksisterende streng) betyder ingen regel (deaktiver prisjustering).
		"products"		: ["REF-CODE-1", "REF-CODE-2"],  // Skelner ikke mellem store/små bogstaver (højst 100.000).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "productRepricing",
			"ok"		: 10,  // Antal ændrede produkter.
			// Hvis alle produkter allerede brugte reglen, får du ok=0.
		},
		...
	]
}

productDelete - Slet et eller flere produkter

ADVARSEL: Produktet og dets konkurrent-URL'er slettes straks og permanent fra din konto og kan ikke gendannes.
Det er samme funktion, som brugergrænsefladen bruger, når du går til All Products, vælger et eller flere produkter og klikker på Selected Products > Delete.
{ "actions" : [
	...
	{
		"a"	: "productDelete",
		"code"	: "REF-CODE",  // Skelner ikke mellem store/små bogstaver (streng), ELLER:
		"code"	: ["REF-CODE-1", "REF-CODE-2"],  // Kan også være et array til sletning af flere produkter (højst 100.000).
		"deleteEmptyCategories"	: 1,  // Kategorier, der bliver tomme
		// som følge af sletningen af produktet/produkterne bliver også slettet.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productDelete",
			"ok"	: 2,  // Antal produkter, der er slettet.
		},
		...
	]
}

productGet - Hent et produkt

{ "actions" : [
	...
	{
		"a"			: "productGet",
		"code"			: "REF-CODE",  // Skelner ikke mellem store/små bogstaver.
		"currency"		: "EUR",  // (valgfri) Konverter alle beløb til denne valuta i stedet for produktprisens valuta.
		"withStats"		: 1,  // (valgfri) Returner statistikobjektet.
		"noCompetitors"		: 1,  // (valgfri) Returner ikke konkurrent-arrayet (for at begrænse datamængden).
		"noComments"		: 1,  // (valgfri) Returner ikke kommentarerne (...).
		"withScreenshots"	: 1,  // (valgfri) Returner URL'en til det nyeste screenshot for hver konkurrent.
		"sickMax"		: 2,  // (valgfri, standard 1) 0-3: Returner kun konkurrent-URL'er med fejlniveau højst N.
	},
	...
] }
Returnerer alle oplysninger om et produkt, herunder konkurrenternes aktuelle priser og lagerstatus.
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "productGet",
			"ok"			: 1,
			"code"			: "REF-CODE",
			"name"			: "The Product Name",
			"price"			: 1234.90,  // Din egen pris, altid i den oprindelige valuta.
			"currency"		: "USD",  // Den oprindelige valuta for "price".
			"convCurrency"		: "EUR",  // Valutaen for konverterede beløb (enten den angivne "currency" eller produktprisens valuta).
			"priceConv"		: 1234.90,  // Din egen pris konverteret med "convCurrency", eller den samme som "price".
			"cost"			: 1234.90,
			"costCurrency"		: "USD",
			"costPriceConv"		: 1234.90,  // Din kostpris konverteret til prisens "currency".
			"costConv"		: 1234.90,  // Din kostpris konverteret til "convCurrency".
			"margin"		: 10.5,  // Procent (kan være negativ).
			"repricingRule"		: "The Rule Name",  // Disse 3 variabler for automatisk prisjustering MANGLER, hvis der ikke bruges automatisk prisjustering.
			"reprice"		: 1234.90,  // Aktuelt beregnet prisjusteringsbeløb baseret på repricingRule.
			"repriceCurrency"	: "USD",  // Samme som "convCurrency", medtaget her for tydelighedens skyld.
			"myWebsite"		: "https://...",
			"created"		: 1234567890,  // Epoch-tidspunkt, hvor produktet blev oprettet.
			"createdBy"		: "SOMEUSER",  // Brugernavn eller "API".
			"edited"		: 1234567890,  // Epoch-tidspunkt for seneste redigering (hvis nogen).
			"editedBy"		: "SOMEUSER",  // Brugernavn eller "API".
			"comments"		: "Some comments\nAnd another line",
			"commentsLast"		: 1234567890,  // Epoch-tidspunkt for seneste ændring af kommentarer (hvis nogen).
			"commentsLastBy"	: "SOMEUSER",  // Brugernavn eller "API".
			"categories"		: ["The Category 1", "The Category 2"],
			"stats"		: {
				// Kun konkurrent-URL'er med fejlniveau 0 eller 1 indgår i statistikken, uanset "sickMax".
				// Alle beløb er i "convCurrency", dvs. enten den angivne "currency" eller produktets oprindelige "currency".
				// ADVARSEL: Hvis der ikke findes et beløb (f.eks. compIn*, når ingen konkurrenter har varen på lager), er værdien 0.
				"rank"			: 1.23,  // Din placering efter pris (1 = ingen har lavere pris end dig).
				"rankIn"		: 1.23,  // Din placering blandt konkurrenter med varen på lager.
				"compCount"		: 3,  // Antal konkurrenter med en gyldig pris.
				"compInCount"		: 3,  // Antal konkurrenter med varen på lager ...
				"compOutCount"		: 3,  // Antal konkurrenter uden varen på lager ...
				"compAvg"		: 123.56,  // Gennemsnittet af alle konkurrenter.
				"compAvgVsMe"		: 123.56,  // Forskellen (i convCurrency) mellem din pris og konkurrenternes gennemsnit (negativ = du er billigere).
				"compInAvg"		: 123.56,  // Gennemsnit for konkurrenter med varen på lager.
				"compInAvgVsMe"		: 123.56,  // Samme som "compAvgVsMe", men kun for konkurrenter med varen på lager.
				"compLowest"		: 123.56,  // Billigste konkurrent.
				"compLowestVsMe"	: 123.56,  // Samme som "compAvgVsMe", men for den billigste i stedet for gennemsnittet.
				"compInLowest"		: 123.56,  // Billigste konkurrent med varen på lager.
				"compInLowestVsMe"	: 123.56,  // Samme som "compInAvgVsMe", men ...
				"compHighest"		: 123.56,  // Dyreste konkurrent.
				"compHighestVsMe"	: 123.56,  // Samme som "compAvgVsMe", men ...
				"compInHighest"		: 123.56,  // Dyreste konkurrent med varen på lager.
				"compInHighestVsMe"	: 123.56,  // Samme som "compInAvgVsMe", men ...
			},
			"competitors"	: [
				// Array med konkurrenter (billigste først), hvor hver konkurrent er et objekt:
				...
				{
					"url"		: "https://...",  // Indeholder eventuelle hashtag-modifikatorer, du har tilføjet.
					"ref"		: "example.com/123abc...def",
					// URL-reference (roddomænet efterfulgt af en MD5-hash på 32 tegn). Sådan identificerer vi URL'er internt.
					"domain"	: "example.com",  // Denne konkurrents roddomæne.
					"price"		: 1234.90,  // Seneste pris fundet på hjemmesiden (efter eventuelle beregninger ud fra dine indstillinger).
					"currency"	: "USD",  // Valuta fundet på hjemmesiden.
					"priceConv"	: 1234.90,  // Pris konverteret til "convCurrency".
					"stock"		: "5",  // Lagerstatus (streng): "A" = tilgængelig, "2" = 2 på lager, "0" = udsolgt, "" = ukendt.
					"salesWk"	: 123,  // Estimeret salg pr. uge (hvis tilgængeligt; se spørgsmålstegnet på produktsiden for forklaring).
					"screenshotURL"	: "https://pricezag.com/.../screenshot.png",
					// Hvis "withScreenshots": URL til det seneste screenshot (offentlig adgang via denne lange URL, uden login).
					"confidence"	: 98,
					// Procentvis sikkerhed for, at vi fandt den rigtige pris (se forklaringen ved at klikke på (?) på produktsiden).
					// Under 70 % (kan ændres) betegnes som "upålidelig" på platformen og markeres med spørgsmålstegn ved prisen.
					// Dette er uafhængigt af fejlniveauet. En URL kan have fejl, selv om vi med sikkerhed fandt den rigtige pris,
					// eller fungere uden fejl, selv om vi er usikre på, om vi fandt den rigtige pris på siden.
					"sick"		: 0,  // URL'ens fejlniveau fra 0 til 3.
					// 0: Seneste besøg lykkedes (vi kunne tilgå siden og finde en pris).
					// 1: Seneste besøg mislykkedes, men vi lykkedes for nylig (helt normalt, ingen grund til bekymring).
					// 2: Vi har ikke kunnet hente en gyldig pris i flere dage.
					// 3: Vi har ikke kunnet hente en gyldig pris i flere uger.
					// BEMÆRK: "price" og "priceConv" findes kun for URL'er med fejlniveau 0 eller 1. Niveau 2 og 3 har ingen pris.
				},
				...
			],
			"custom"	: {
				// Dette er dine brugerdefinerede felter. Åbn
				// produktsiden i brugergrænsefladen, og klik på (?) ved feltet CUSTOM FIELDS for en forklaring.
				// Hvis der ikke er nogen, findes hele objektet "custom" ikke i svaret.
				"variable_1"	: "value 1",  // Værdierne er altid strenge, selv når de faktisk er tal,
				"variable_2"	: "value 2",  // og en tom værdi findes ikke, da den ville have slettet feltet.
				...
			}
		},
		...
	]
}

productGetAll - Hent alle produkter

Sørg for, at dine timeout-indstillinger er tilstrækkeligt høje, da serveren kan bruge noget tid afhængigt af antallet af produkter og konkurrenter.
{ "actions" : [
	...
	{
		"a"			: "productGetAll",
		"currency"		: "EUR",  // (valgfri) Konverter alle beløb til denne valuta i stedet for hvert produkts egen valuta.
		"withStats"		: 1,  // (valgfri) Returner statistikobjektet.
		"noCompetitors"		: 1,  // (valgfri) Returner ikke konkurrent-arrayet (for at begrænse datamængden).
		"noComments"		: 1,  // (valgfri) Returner ikke kommentarerne (...).
		"withScreenshots"	: 1,  // (valgfri) Returner URL'en til det nyeste screenshot for hver konkurrent.
		"sickMax"		: 2,  // (valgfri, standard 1) 0-3: Returner kun konkurrent-URL'er med fejlniveau højst N.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "productGetAll",
			"ok"		: 10,  // Samlet antal produkter.
			"products"	: [ // Array med produkter (alfanumerisk rækkefølge efter referencekode), hvor hvert produkt er et objekt:
				...
				{ ... },  // Produktobjekt som i svaret fra productGet ovenfor.
				...
			],
		},
		...
	]
}
Du kan også bruge handlingen categoryGet.

Kategorier

categoryCreate - Opret en ny kategori

Dette er den samme funktion, som brugergrænsefladen bruger på siden Categories, når du klikker på knappen New Category. Med API'et kan du desuden tilknytte produkter allerede ved oprettelsen.
I modsætning til handlinger, der kan bruge både eksisterende og nye kategorier (f.eks. productCreate), mislykkes denne handling, hvis kategorien allerede findes.
{ "actions" : [
	...
	{
		"a"		: "categoryCreate",
		"name"		: "The New Category Name",
		"name"		: ["New Category 1", "New Category 2"],  // Kan også være et array.
		"products"	: ["REF-CODE-1", "REF-CODE-2"],  // (valgfri) Tilføj disse produkter til kategorierne, når de oprettes.
		"comments"	: "Some comments\nAnd another line",  // (valgfri) Højst 1.000 UTF-8-tegn.
	},
	...
] }

categoryEdit - Rediger en eksisterende kategori

Du kan også se på handlingen productCategories for at vælge den løsning, der passer dig bedst.
{ "actions" : [
	...
	{
		"a"			: "categoryEdit",
		"name"			: "The Category Name",		// Skelner ikke mellem store/små bogstaver.
		"newName"		: "The Category Renamed",  // (valgfri)
		"products"		: ["REF-CODE-1", "REF-CODE-2"],  // (valgfri) Overskriv produktlisten.
		"productsAdd"		: ["REF-CODE-1", "REF-CODE-2"],  // (valgfri) Tilføj disse produkter til kategorien.
		"productsRemove"	: ["REF-CODE-3", "REF-CODE-4"],  // (valgfri) Fjern disse produkter fra kategorien (produkterne slettes IKKE).
		"comments"		: "To overwrite the comments.",  // (valgfri) Højst 1.000 UTF-8-tegn.
	},
	...
] }
Felterne "products", "productsAdd" og "productsRemove" gør alle det samme: De ændrer, hvilke produkter der tilhører kategorien, men på forskellige måder. Brug blot "products" : []
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryEdit",
			"ok"			: 5,  // Antal foretagne ændringer.
			// (Omdøbning og ændring af kommentarer tæller hver som én, ligesom hvert produkt, der tilføjes/fjernes).
			"name"			: "The Category Name",  // Nyt navn, hvis omdøbt, ellers det eksisterende.
			"productsCount"		: 30,  // Nyt antal produkter i kategorien (uanset om tallet er ændret).
			"productsAdded"		: 2,  // Antal produkter tilføjet kategorien.
			"productsRemoved"	: 2,  // Antal produkter fjernet fra kategorien.
		},
		...
	]
}

categoryDelete - Slet en eller flere kategorier

Det er samme funktion, som brugergrænsefladen bruger, når du går til Categories, vælger nogle kategorier og klikker på Selected Categories > Delete.
{ "actions" : [
	...
	{
		"a"			: "categoryDelete",
		"name"			: "The Category Name",  // Skelner ikke mellem store/små bogstaver (streng), ELLER:
		"name"			: ["Category 1", "Category 2"],  // Kan også være et array til sletning af flere kategorier (højst 1.000).
		"deleteProducts"	: 1,
		// Som standard slettes kategorien, mens dens produkter blot fjernes fra kategorien,
		// men med deleteProducts slettes alle produkter i kategorien uden bekræftelse,
		// og deres konkurrent-URL’er slettes også uden mulighed for gendannelse!
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryDelete",
			"ok"			: 2,  // Antal slettede kategorier.
			"productsCount"		: 123,  // Antal produkter berørt af kategorien/kategorierne.
			"productsDeleted"	: 123,  // Antal produkter slettet som følge af "deleteProducts".
			// BEMÆRK: Et produkt, der findes i flere af de angivne kategorier, tælles kun én gang.
		},
		...
	]
}

categoryCopy - Kopier/flyt produkter mellem kategorier

Kopier eller flyt produkter fra matchende kategorier til andre nye og/eller eksisterende kategorier. Du kan også bruge dette til at SAMMENLÆGGE kategorier (se eksemplerne nederst på siden).
Ingen af indstillingerne her sletter produkter; produkterne flyttes blot ind og ud af kategorier.
Det er samme funktion, som brugergrænsefladen bruger, når du går til Categories, vælger nogle kategorier og klikker på Selected Categories > Copy & More. Du kan se en mere detaljeret forklaring der.
{ "actions" : [
	...
	{
		"a"			: "categoryCopy",
		"categoriesFrom"	: ["Category 1", "Category 2"],  // Find produkter i disse kategorier (kilden).
		"removeMode"		: "cat",  // (valgfri) Fjern de tilsvarende produkter fra de angivne "categoriesFrom".
		"removeMode"		: "all",  // (valgfri) Fjern de tilsvarende produkter fra alle deres kategorier.
		// Hvis removeMode udelades, bliver produkterne i "categoriesFrom", samtidig med at de tilføjes "categoriesTo" (kopi i stedet for flytning).
		"deleteMode"		: "cat",  // (valgfri) Slet de angivne "categoriesFrom", efter produkterne er kopieret.
		"deleteMode"		: "all",  // (valgfri) Slet alle kategorier, som disse produkter tilhører.
		// Hvis deleteMode udelades, eksisterer "categoriesFrom" stadig, selv om produkterne blev fjernet med "removeMode".
		"categoriesTo"		: ["Another Category 1", "Another Category 2"],
		// Tilføj alle matchende produkter til disse målkategorier (manglende kategorier oprettes).
		"categoriesToClear"	: 1,  // (valgfri) Tøm først disse kategorier, som produkterne skal tilføjes til.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryCopy",
			"ok"			: 3,  // Antal ændrede kategorier (både kilde og mål).
			// "ok" er summen af categoriesModified + categoriesCreated + categoriesDeleted.
			"categoriesModified"	: 2,  // Antal eksisterende kategorier, der er ændret (både kilde og mål).
			"categoriesCreated"	: 1,  // Antal nye kategorier, der er oprettet.
			"categoriesDeleted"	: 0,  // Antal kategorier slettet som følge af "deleteMode".
			"productsCount"		: 123,  // Antal produkter, der matcher de angivne "categoriesFrom".
			// BEMÆRK: Et produkt, der findes i flere af de angivne "categoriesFrom", tælles kun én gang.
		},
		...
	]
}

categoryGet - Hent en kategori

{ "actions" : [
	...
	{
		"a"		: "categoryGet",
		"name"		: "The Category Name",  // Skelner ikke mellem store/små bogstaver.
		"currency"	: "EUR",  // (PÅKRÆVET hvis withStats eller withProducts) Valuta til statistikken.
		"withStats"	: 1,  // Returner også statistikken (langsommere).
		"withProducts"	: 1,  // Returner også produkterne i denne kategori (kan give store datamængder).
		"noCompetitors"	: 1,  // Hvis withProducts, returner ikke konkurrent-arrayet (for at reducere datamængden).
		"noComments"	: 1,  // Hvis withProducts, returner ikke produktkommentarer (kategorikommentarer returneres stadig).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryGet",
			"ok"			: 1,
			"name"			: "The Category Name",
			"created"		: 1234567890,  // Epoch-tidspunkt.
			"createdBy"		: "SOMEUSER",  // Brugernavn eller "API".
			"comments"		: "Comments of this category",
			"commentsLast"		: 1234567890,  // Epoch-tidspunkt for seneste ændring af kommentarer (hvis nogen).
			"commentsLastBy"	: "SOMEUSER",  // Brugernavn eller "API".
			"productsCount"		: 10,  // Antal produkter i denne kategori.
			"stats"		: {
				// Dette er statistikken fra kategorisiden i brugergrænsefladen og kolonnerne på kategorilisten.
				// Vælg dem som kolonne i kategorilisten, og klik på (?) for flere detaljer.
				// Alle beløb angives i den "currency", du sendte i anmodningen.
				// ADVARSEL: Hvis der ikke findes et beløb (f.eks. compIn*, når ingen konkurrenter har varen på lager), er værdien 0.
				"priceAvg"		: 123.45,  // Gennemsnittet af dine egne priser.
				"costAvg"		: 123.45,  // Kun produkter med en kostpris tæller med i dette gennemsnit.
				"marginAvg"		: 10.5,  // Procent (kan være negativ; kun produkter med kostpris tæller med).
				"rankAvg"		: 1.23,  // Din gennemsnitlige prisplacering (1 = ingen er billigere end dig).
				"rankInAvg"		: 1.23,  // Din gennemsnitlige placering blandt konkurrenter med varen på lager.
				"productsCountComp"	: 9,  // Antal produkter med konkurrenter.
				"productsCountCompIn"	: 7,  // Antal produkter med konkurrenter, som har varen på lager.
				"compAvg"		: 123.56,  // Gennemsnit af konkurrenternes gennemsnitspriser.
				"compAvgVsMe"		: 123.56,  // Gennemsnitlig forskel (i valutaen) mellem din pris og konkurrenternes (negativ = du er billigere).
				"compInAvg"		: 123.56,  // Samme som "compAvg", men kun konkurrenter med varen på lager.
				"compInAvgVsMe"		: 123.56,  // Samme som "compAvgVsMe", men kun for konkurrenter med varen på lager.
				"compLowest"		: 123.56,  // Samme som "compAvg", men gennemsnit af den billigste konkurrent for hvert produkt.
				"compLowestVsMe"	: 123.56,  // Samme som "compAvgVsMe", men ...
				"compInLowest"		: 123.56,  // Samme som "compInAvg", men ...
				"compInLowestVsMe"	: 123.56,  // Samme som "compInAvgVsMe", men ...
				"compHighest"		: 123.56,  // Samme som "compAvg", men gennemsnit af den dyreste konkurrent for hvert produkt.
				"compHighestVsMe"	: 123.56,  // Samme som "compAvgVsMe", men ...
				"compInHighest"		: 123.56,  // Samme som "compInAvg", men ...
				"compInHighestVsMe"	: 123.56,  // Samme som "compInAvgVsMe", men ...
			},
			"products"	: [ // Array med produkter (alfanumerisk rækkefølge efter referencekode), hvor hvert produkt er et objekt:
				...
				{ ... },  // Produktobjekt som i svaret fra productGet.
				...
			],
		},
		...
	]
}

categoryGetAll - Hent alle kategorier

I modsætning til categoryGet returnerer handlingen categoryGetAll ikke et objekt med detaljer for hvert produkt. Det skyldes, at samme produkt kan høre til flere kategorier, hvilket kunne give meget store og gentagne datasæt. Hvis du vil have produktdata, skal du sandsynligvis bruge categoryGet for hver kategori eller productGetAll og derefter sortere produkterne efter deres kategorier.
{ "actions" : [
	...
	{
		"a"		: "categoryGetAll",
		"withStats"	: 1,  // Returner også statistikken (langsommere).
		"noComments"	: 1,  // Returner ikke kommentarer (for at reducere datamængden).
		"noProducts"	: 1,  // Returner ikke produkt-arrayet (...).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "categoryGetAll",
			"ok"		: 10,  // Samlet antal kategorier (længden af "categories"-arrayet).
			"categories"	: [ // Array med kategorier (alfabetisk rækkefølge), hvor hver kategori er et objekt:
				...
				{
					"name"			: "The Category Name",
					"created"		: 1234567890,  // Epoch-tidspunkt.
					"createdBy"		: "SOMEUSER",  // Brugernavn eller "API".
					"comments"		: "Comments of this category",
					"commentsLast"		: 1234567890,  // Epoch-tidspunkt for seneste ændring af kommentarer (hvis nogen).
					"commentsLastBy"	: "SOMEUSER",  // Brugernavn eller "API".
					"productsCount"		: 2,  // Antal produkter i denne kategori.
					"products"	: ["REF-CODE-1", "REF-CODE-2"],  // Referencekoderne for kategoriens produkter (alfabetisk rækkefølge), medmindre noProducts=1.
					"stats"		: {
						// Hvis "withStats", samme statistikobjekt som ved categoryGet ovenfor.
						...
					},
				}
				...
			],
		},
		...
	]
}

Prisalarmer

alertRecipientCreate - Opret en ny alarmmodtager

Det er samme funktion, som brugergrænsefladen bruger, når du går til Alerts og klikker på New Recipient.
Klik gerne på de grønne spørgsmålstegn i din konto for at få detaljer om de enkelte felter.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientCreate",
		"email"		: "john@example.net",  // Kan også være et telefonnummer til SMS-alarmer; se hjælpen i brugergrænsefladen.
		"name"		: "john",  // Et simpelt visningsnavn (typisk fornavn; skelner ikke mellem store/små bogstaver).
		"maxFrequency"	: 1800,  // (valgfri, standard 7200) Se hjælpen i brugergrænsefladen.
		"simplify"	: 0,  // (valgfri, standard 1) Aktiver forenkling (se hjælpen i brugergrænsefladen).
		"sleepEnabled"	: 1,  // (valgfri) Aktiver hvileperiode.
		"sleepFrom"	: "18:30",  // (kun hvis sleepEnabled) 24-timersformat.
		"sleepTo"	: "07:00",  // (kun hvis sleepEnabled) 24-timersformat.
		"timezone"	: "America/Los_Angeles",  // (kun hvis sleepEnabled) Formatet er stien til Linux-mapperne i /usr/share/zoneinfo.
				// Mellemrum konverteres til understregninger.
				// Find din tidszone i formularen [New Recipient] i brugergrænsefladen for at sikre den præcise stavemåde.
		"status"	: "hold",  // (valgfri) Angiv "hold" eller "disable". Alle andre værdier (f.eks. "") betyder aktiv.
		"rules"		: [...],  // (valgfri) Indledende alarmregler (array med regelobjekter), som "rulesAdd" i alertRecipientEdit nedenfor.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientCreate",
			"ok"	: 1,
		},
		...
	]
}

alertRecipientEdit - Rediger en modtager og/eller dennes alarmregler

Det er samme funktion, som brugergrænsefladen bruger, når du går til Alerts og klikker på Settings eller Rules for en modtager.
Klik gerne på de grønne spørgsmålstegn i din konto for at få detaljer om de enkelte felter.
Variablen "email" afgør, hvilken modtager der opdateres. Alle andre felter ændrer denne modtagers indstillinger.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientEdit",
		"email"		: "john@example.net",  // Nuværende e-mailadresse eller telefonnummer (præcis samme format som returneret af alertGetAll).
		"newEmail"	: "john2@example.net",  // (valgfri) Ny e-mailadresse eller nyt telefonnummer; se hjælpen i brugergrænsefladen.
		"name"		: "john2",  // (valgfri) Nyt navn.
		"maxFrequency"	: 1800,  // (valgfri) Se hjælpen i brugergrænsefladen.
		"simplify"	: 1,  // (valgfri) Aktiver forenkling (se hjælpen i brugergrænsefladen).
		"sleepEnabled"	: 1,  // (valgfri) Aktiver hvileperiode.
		"sleepFrom"	: "18:30",  // (kun hvis sleepEnabled) 24-timersformat.
		"sleepTo"	: "07:00",  // (kun hvis sleepEnabled) 24-timersformat.
		"timezone"	: "America/Los_Angeles",  // (kun hvis sleepEnabled) Se alertRecipientCreate ovenfor.
		"status"	: "hold",  // (valgfri) Angiv "hold" eller "disable". Alle andre værdier (f.eks. "") giver "active".
		"rules"		: [{ruleObject}, {ruleObject}],  // (valgfri) Overskriv alle eksisterende regler (tomt array fjerner alle).
				  // Angiv ikke noget "rules"-array, hvis du vil bevare de eksisterende regler.
		"rulesAdd"	: [ // (valgfri) Tilføj disse regler til de eksisterende.
			...
			{  // DETTE ER FORMATET FOR ET REGELOBJEKT:
				"name"		: "me_cross_avg",  // Se Alerts > [Rules] > [+ New Rule] i brugergrænsefladen, og vælg en regel for at se dens API-navn.
				"disabled"	: 1,  // (valgfri) Det giver sjældent mening at oprette en deaktiveret regel, men alertRuleEdit kan bruge dette felt.
				"var_n"		: 123.00,  // En "X"-variabel bliver til "var_x",
				"var_c"		: "USD",  // ... så disse felter afhænger af, hvad reglen har brug for,
				"var_h"		: 24,  // ... og nogle regler har slet ingen variabler.
				"direction"	: "both",  // Eller "drop" eller "rise", hvis reglen har en retning.
				"categories"	: ["The Category 1", "The Category 2"],  // (valgfri) Tom eller udeladt betyder ALLE PRODUKTER.
				"ignoreOos"	: 1,  // (valgfri) Ignorer konkurrenter uden varen på lager (se brugergrænsefladen).
				"urlInclude"	: "",  // (valgfri, skelner ikke mellem store/små bogstaver).
				"urlExclude"	: "amazon",  // (valgfri, skelner ikke mellem store/små bogstaver).
				// "ruleNumber" identificerer hver regel (f.eks. til senere redigering eller sletning).
				// Du ser det i regelobjekterne, når du henter dem, men du kan ikke selv angive det.
			}
			...
		],
		"rulesRemove"	: [1,4,7],  // (valgfri) "ruleNumber" for de regler, der skal fjernes.
					// Du får dette "ruleNumber" fra alertGetAll nedenfor.
					// BEMÆRK: Brug "rules" = [] for at fjerne alle regler.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientEdit",
			"ok"	: 3,  // Antal ændringer (variabler + tilføjede/slettede regler).
		},
		...
	]
}

alertRecipientDelete - Slet en alarmmodtager

Dette er permanent. Alle modtagerens alarmregler og deres historik slettes straks uden mulighed for gendannelse.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientDelete",
		"email"		: "john@example.net",  // Nuværende e-mailadresse eller telefonnummer (præcis samme format som returneret af alertGetAll).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientDelete",
			"ok"	: 1,
		},
		...
	]
}

alertRuleEdit - Rediger en eksisterende alarmregel for en modtager

Her kan du ændre en enkelt eksisterende alarmregel i stedet for at udskifte eller tilføje regler. Du kan f.eks. ændre variablen N eller slå en regel til/fra.
Brug i stedet arrayet "rulesRemove" i handlingen alertRecipientEdit til at fjerne en regel og "rulesAdd" i samme handling til at tilføje en regel.
{ "actions" : [
	...
	{
		"a"		: "alertRuleEdit",
		"email"		: "john@example.net",  // Modtagerens e-mailadresse eller telefonnummer (samme format som returneres af alertGetAll).
		"ruleNumber"	: 1,  // Referencenummeret for reglen, der skal redigeres, som returneret af alertGetAll nedenfor.
		"rule"		: {
			// Variabler i reglen, der skal overskrives; se "rulesAdd" i alertRecipientEdit ovenfor for FORMATET FOR REGEL-OBJEKTER.
			"disabled"	: 1,  // For eksempel for at aktivere/deaktivere en regel,
			"var_n"		: 5,  // eller enhver anden variabel, f.eks. N, afhængigt af regeltypen.
			...
		},
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRuleEdit",
			"ok"	: 1,  // Antal ændrede variabler.
		},
		...
	]
}

alertGetAll - Hent alle alarmmodtagere og deres regler

{ "actions" : [
	...
	{
		"a"	: "alertGetAll",
		// Denne handling har ingen parametre.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "alertGetAll",
			"ok"		: 3,  // Antal modtagere (længden af arrayet "recipients").
			"recipients"	: [ // Array med alle modtagere, hver som et objekt ligesom i alertRecipientCreate ovenfor.
				...
				{
					"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, hver som et objekt beskrevet i alertRecipientEdit ovenfor.
						...
						{
							"ruleNumber"	: 4,  // Referencenummer til brug ved redigering af reglen med alertRuleEdit ovenfor.
							"name"		: "me_cross_avg",
							"disabled"	: 0,
							"var_n"		: "123.00",  // BEMÆRK: Alle variabler returneres som strenge, selv når de er tal.
							"var_c"		: "USD",
							"var_h"		: "24",
							"direction"	: "both",
							"categories"	: [],  // Tom betyder alle produkter.
							"ignoreOos"	: 0,
							"urlInclude"	: "",
							"urlExclude"	: "amazon",
						}
						...
					],
				}
				...
			],
		},
		...
	]
}

Regler for automatisk prisjustering

repricingCreate - Opret en ny prisjusteringsregel

Det er samme funktion, som brugergrænsefladen bruger, når du går til Repricing og klikker på New Repricing Rule.
Klik gerne på de grønne spørgsmålstegn i din konto for at få detaljer om de enkelte felter.
Men hvordan knytter du produkter til reglen? Ved at redigere produkterne selv med handlingen productEdit eller productRepricing. En regel "ejer" ikke produkter; det er produkterne, der henviser til en bestemt regel.
{ "actions" : [
	...
	{
		"a"	: "repricingCreate",
		"name"	: "The Rule Name",  // Højst 50 tegn.
		"init"	: { // Objekt for fallback-startværdi (den første række med teksten "Set my price to").
			"target"	: "cheapest_n",  // (se listen nedenfor)
			"var_n"		: 3,  // Kun hvis målet kræver en N-variabel.
			"plusAmount"	: -2,  // Positiv for over, negativ for under.
			"plusCurrency"	: "%",  // Valuta (f.eks. "USD") eller "%".
			// Dette svarer til "Sæt min pris 2 % under gennemsnittet af de 3 billigste konkurrenter".
			// ADVARSEL: I modsætning til "never"-objekterne nedenfor har startværdien ingen "direction". Det er fortegnet på "plusAmount", der afgør over/under.
		},
		"never"	: [ // (valgfri) "but never"-objekter, som udføres i rækkefølge (højst 0-10).
			{
				"target"	: "cheapest_n_in",  // (se listen nedenfor)
				"var_n"		: 1,  // Kun hvis målet kræver en N-variabel.
				"direction"	: "below",  // Eller "above".
				"plusAmount"	: -10,  // Positiv for plus, negativ for minus (påkrævet, også hvis 0).
				"plusCurrency"	: "USD",  // Valuta eller "%" (påkrævet, også hvis plusAmount=0).
				// Dette svarer til "Men aldrig under den billigste konkurrent med varen på lager minus 10,00 USD".
			},
			{
				"target"	: "cost",
				"direction"	: "below",
				"plusAmount"	: 5,
				"plusCurrency"	: "%",
				// Dette svarer til "Men aldrig under min kostpris plus 5 %".
			}
		],
		"ignoreDomains"	: "amazon ebay.com MyLabel1",  // (valgfri) Domæner og/eller etiketter, der skal ignoreres blandt konkurrenterne (store/små bogstaver er ligegyldige; se brugergrænsefladen).
		"charm"		: "none|zeros|charm",  // (valgfri, standard "none") Psykologisk prisafrunding ("", "none" og udeladt betyder det samme).
		"confidence"	: 82,  // (valgfri, standard 70) Mindste sikkerhedsprocent 0-99 (se brugergrænsefladen).
		"disabled"	: 1,  // (valgfri)
	},
	...
] }
// ========== Alle tilgængelige "target"-strenge: ==========
// "average" : Gennemsnit af alle konkurrenter.
// "average_in" : Gennemsnit af alle konkurrenter med varen på lager.
// "cheapest_n" : Gennemsnit af de N billigste konkurrenter (eller "Den billigste", hvis N=1).
// "cheapest_n_in" : Gennemsnit af de N billigste konkurrenter med varen på lager (eller ...).
// "highest_n" : Gennemsnit af de N dyreste konkurrenter (eller ...).
// "highest_n_in" : Gennemsnit af de N dyreste konkurrenter med varen på lager (eller ...).
// "cost" : Min kostpris.
// "me_avg_n" : Min gennemsnitspris i de seneste N timer (til at begrænse, hvor hurtigt prisen ændres).
// "domain:example.com" : Prisen hos example.com (laveste pris, hvis der er flere fra samme domæne).
// "domainIn:example.com" : Prisen hos example.com, kun hvis varen er på lager (...).
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingCreate",
			"ok"	: 3,  // Antal objekter, der er læst og gemt korrekt (f.eks. init + never[0] + never[1] = 3).
			"name"	: "The Rule Name",  // Endeligt navn i databasen (specialtegn kan blive konverteret).
		},
		...
	]
}

repricingEdit - Rediger en eksisterende prisjusteringsregel

Rediger en eksisterende prisjusteringsregel.
Se repricingCreate ovenfor for at forstå, hvordan disse variabler fungerer.
Dette ændrer selve reglen, ikke de produkter, der er knyttet til den. Hvis du vil knytte produkter til regler, skal du bruge handlingen productEdit eller productRepricing.
{ "actions" : [
	...
	{
		"a"		: "repricingEdit",
		"name"		: "The Rule Name",  // Skelner ikke mellem store/små bogstaver.
		"newName"	: "The Rule Renamed",  // (valgfri) Højst 50 tegn.
		"init"		: { // (valgfri) Hvis angivet, overskriv en eller flere variabler i startværdien (se repricingCreate).
			"plusAmount"	: 1,  // Du kan f.eks. ændre kun "plusAmount", mens de andre variabler bevarer deres værdier.
			// ADVARSEL: Hvis det nye "target" kræver en N-variabel, skal du angive "var_n".
		},
		"never"		: [...], // (valgfri) Du kan overskrive hele "never"-arrayet, men du vil sandsynligvis hellere bruge never_* nedenfor.
		// "never":[] sletter alle eksisterende betingelser. Udelad feltet for at bevare dem.
		"never_0"	: { // (valgfri) Overskriv det første "but never"-objekt (arrayindeks 0).
			"var_n"		: 2,  // Du kan f.eks. kun ændre "var_n", mens de andre variabler bevarer deres værdier.
		},
		"never_2"	: {
			"target"	: "",  // Dette deaktiverer den tredje "but never"-betingelse (arrayindeks 2).
			// Du behøver ikke bekymre dig om objektets øvrige variabler, hvis "target" sættes til "".
			// "never_2":{} gør det samme.
		},
		"never_6"	: {...}, // Dette kan være en ny "but never"-betingelse, som du tilføjer. Så kræves alle variabler ligesom i repricingCreate.
		// "never_9" er maksimum, da "never"-arrayet kan indeholde op til 10 elementer.
		"ignoreDomains"	: "",  // (valgfri) Samme som repricingCreate.
		"charm"		: "zeros",  // (valgfri) ...
		"confidence"	: 82,  // (valgfri) ...
		"disabled"	: 1,  // (valgfri) 0 for at aktivere en regel, der er deaktiveret.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingEdit",
			"ok"	: 3,  // Antal ændringer (f.eks. én variabel i et never_N-objekt + én i "init"-objektet + "charm").
			"name"	: "The Rule Name",  // Endeligt (nyt) navn i databasen (specialtegn kan blive konverteret).
		},
		...
	]
}

repricingDelete - Slet en prisjusteringsregel

Dette er permanent. Reglen slettes straks og permanent fra din konto. Produkter, der bruger reglen, vil derefter stå uden en regel, så deres automatiske prisjustering ikke længere fungerer.
{ "actions" : [
	...
	{
		"a"		: "repricingDelete",
		"name"		: "The Rule Name",  // Skelner ikke mellem store/små bogstaver.
		"onlyIfUnused"	: 1,  // (valgfri) For en sikkerheds skyld kan du bruge dette til at få en fejl, hvis nogle produkter bruger reglen.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "repricingDelete",
			"ok"		: 1,
			"productsCount"	: 10,  // Antal produkter, der brugte reglen (og nu står uden).
		},
		...
	]
}

repricingGetAll - Hent alle prisjusteringsregler

Se først repricingCreate ovenfor, da svarformatet for denne handling minder meget om det, du angiver til repricingCreate i anmodningen.
{ "actions" : [
	...
	{
		"a"	: "repricingGetAll",
		// Denne handling har ingen andre parametre.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingGetAll",
			"ok"	: 10,  // Samlet antal regler (længden af "rules"-arrayet).
			"rules"	: [ // Array med prisjusteringsregler (alfabetisk rækkefølge), hvor hver regel er et objekt:
				...
				{
					"name"		: "Some Repricing Rule",
					"created"	: 1234567890,  // Epoch-tidspunkt, hvor reglen blev oprettet.
					"createdBy"	: "SOMEUSER",  // Brugernavn eller "API".
					"edited"	: 1234567890,  // Tidspunkt for seneste redigering (hvis nogen, ellers mangler variablen).
					"editedBy"	: "SOMEUSER",  // Brugernavn eller "API" (eller udeladt).
					"disabled"	: 1234567890,  // Hvis reglen er deaktiveret: Epoch-tidspunktet for seneste deaktivering. Ellers udeladt.
					"disabledBy"	: "SOMEUSER",  // Brugernavn eller "API" (eller udeladt).
					"productsCount"	: 10,  // Antal produkter, der i øjeblikket bruger reglen.
					"ignoreDomains"	: "amazon ebay.com MyLabel1",  // Domæner og/eller etiketter fra konkurrenter, der ignoreres (se brugergrænsefladen).
					"charm"		: "charm",  // Tilstand for psykologisk prisafrunding (none|zeros|charm).
					"confidence"	: 82,  // Mindste sikkerhedsprocent 0-99 (se brugergrænsefladen).
					"init"	: { // Objekt for fallback-startværdi (den første række med teksten "Set my price to").
						"target"	: "cheapest_n",  // (se listen under repricingCreate)
						"var_n"		: 3,  // Hvis målet kræver en N-variabel, ellers udeladt.
						"plusAmount"	: -2,  // Positiv for over, negativ for under.
						"plusCurrency"	: "%",  // Valuta (f.eks. "USD") eller "%".
						// Dette svarer til "Sæt min pris 2 % under gennemsnittet af de 3 billigste konkurrenter".
						// ADVARSEL: I modsætning til "never"-objekterne nedenfor har startværdien ingen "direction". Det er fortegnet på "plusAmount", der afgør over/under.
					},
					"never"	: [ // "but never"-objekter, som udføres i rækkefølge.
						{
							"target"	: "cheapest_n_in",
							"var_n"		: 1,
							"direction"	: "below",  // Eller "above".
							"plusAmount"	: -10,  // Positiv for plus, negativ for minus.
							"plusCurrency"	: "USD",  // Valuta eller "%".
							// Dette svarer til "Men aldrig under den billigste konkurrent med varen på lager minus 10,00 USD".
						},
						{},  // Det betyder, at denne anden række med "But never"-betingelser er tom.
						{
							"target"	: "cost",
							"direction"	: "below",
							"plusAmount"	: 5,
							"plusCurrency"	: "%",
							// Dette svarer til "Men aldrig under min kostpris plus 5 %".
						}
					],
				}
				...
			],
		},
		...
	]
}

Regneark

spreadsheetDownload - Download et regneark

Denne handling er en UNDTAGELSE: Den kan ikke kombineres med andre handlinger og returnerer en regnearksfil i stedet for et JSON-svarobjekt (medmindre du bruger "savePreset" eller "downloadURL" nedenfor)
Dette svarer til det, du kan gøre på siden Export i din konto.
Sørg for, at dine timeout-indstillinger er høje nok, da et stort regneark kan tage serveren noget tid at generere.
GØR DET NEMT: Klik på Show API equivalent på eksportsiden for at generere hele JSON-anmodningen (og curl-kommandoen) ud fra de valgte indstillinger i formularen.
{ "actions" : [
	{
		"a"		: "spreadsheetDownload",
		"preset"	: "Some Preset Name",  // (valgfri) I stedet for at angive alt nedenfor kan du bruge en af dine eller vores skabeloner.
			// For dine egne skabeloner skal dette være hele navnet uden brugernavn foran eller valuta bagefter.
			// For vores standardskabeloner kan du finde navnene ved at åbne menuen DIRECT DOWNLOAD på eksportsiden og holde musen over dem.
			// F.eks. er "pricezag_backup" vores særlige sikkerhedskopiskabelon (se "Special BACKUP format to re-import" under DIRECT DOWNLOAD).
			// Du kan også angive andre variabler nedenfor, der overskriver skabelonens normale indstillinger (f.eks. valuta, format eller kategorier).
		"savePreset"	: "My New Preset Name",  // (valgfri) Gem alt, du angiver nedenfor, som en ny skabelon (der så kan bruges i både brugergrænsefladen og API'et).
			// UNDTAGELSE FRA UNDTAGELSEN: Hvis du bruger savePreset, downloades intet regneark; svaret bliver i stedet et almindeligt JSON-objekt.
		"savePresetOverwrite"	: 1,  // (valgfri) Overskriv den eksisterende skabelon angivet i "savePreset" (ellers returneres en fejl).
			// ADVARSEL: Overskrivning betyder, at intet fra den tidligere skabelon bevares. Forsøg derfor ikke kun at ændre ét felt.
			// Brug spreadsheetPresetEdit nedenfor til at omdøbe eller slette en skabelon.
		"downloadURL"	: 1,  // (valgfri) UNDTAGELSE FRA UNDTAGELSEN: I stedet for filen returneres et normalt JSON-svar med "fileURL" i objektet,
			// som er en offentlig URL til filen (ingen godkendelse eller API-nøgle kræves). Filen kan downloades af alle i 15 minutter.
			// "ok" angiver antal rækker, og "fileSize" vises i byte.
		"format"	: "xlsx|xls|csv|csv-tab",  // (standard er csv for API'et)
		"currency"	: "USD",  // (PÅKRÆVET, medmindre der bruges skabelon) Valuta for ALLE beløb.
		"categories"	: ["Category 1", "Category 2"],  // Medtag kun produkter fra disse kategorier (ellers alle produkter).
		"historyPeriod"	: "prev_6mo",  // (valgfri, standard "now")
			// Klik FØRST på spørgsmålstegnene (?) på eksportsiden om historikperioder; de forklarer indstillingerne.
			// "historyPeriod" bestemmer, hvor langt tilbage vi henter beløb, før data opdeles i flere rækker pr. produkt efter "historyRow".
			// "now": Ingen historik, kun aktuelle data (og derfor ingen "historyRow").
			// "all": Hele den periode, vi har data for siden tilmelding (eller i hvert fald for de berørte produkter). KAN VÆRE LANGSOMT.
			// "1234500000-1237800000": En selvvalgt periode ("fra-til" i epoch-tid).
			// "123h": Seneste 123 timer. Intet snap til tidsgrænser; slutter nu og kan begynde midt i en klokktime.
			// "cur_123(d|wk|mo|yr)": Seneste 123 dage/uger/måneder/år inklusive den nuværende ufuldstændige periode. "cur_2mo" hentet den 10. dækker således 40 dage.
			// "prev_123(d|wk|mo|yr)": De foregående 123 afsluttede dage/uger/måneder/år. "prev_2mo" hentet 10. februar dækker 62 dage (december + januar).
			// Starttidspunktet for cur_* og prev_* (og sluttidspunktet for prev_*) afrundes altid til forudgående midnat, mens cur_* slutter nu.
			// "cur_2d" hentet kl. 12 dækker derfor de seneste 36 timer, mens "prev_2d" dækker 48 timer, der sluttede for 12 timer siden.
		"historyRow"	: "2w",  // (påkrævet, men kun hvis "historyPeriod" ikke er "now")
			// "historyRow" bestemmer, hvor lang en periode hver række repræsenterer (gennemsnit for perioden), og giver derfor flere rækker pr. produkt (undtagen "all").
			// Tænk på "historyRow" som OPDELINGEN af "historyPeriod" i enkelte regnearksrækker for hvert produkt.
			// "all": Gennemsnit over hele historyPeriod i én række pr. produkt.
			// "123(d|wk|mo|qt|yr)": Opdel fra midnat i intervaller på 123 kalenderdage/uger/måneder/kvartaler/år. 123 kan udelades ved 1 ("wk" i stedet for "1wk").
			// Henter du data lørdag med historyRow:"7d", bliver hver række gennemsnittet fra lørdag kl. 00:00 til fredag kl. 23:59.
			// Med historyRow:"1wk" bliver hver række i stedet gennemsnittet for mandag 00:00 til søndag 23:59; seneste række er den ufuldstændige uge man-lør.
			// ▶ GRÆNSE PÅ 500.000 RÆKKER: Både brugergrænsefladen og API'et afviser historikindstillinger, der giver mere end 500.000 rækker.
			// Det kan nemt ske med historyRow:"day", hvis historyPeriod dækker mange dage, f.eks. 365 dage x 1.400 produkter.
			// Hvis du virkelig har brug for dette, så download et regneark pr. kategori med et par hundrede produkter ad gangen.
		"timezone"	: "America/Los_Angeles",  // (valgfri, standard "UTC") Formatet er stien til Linux-mapperne i /usr/share/zoneinfo.
			// Mellemrum konverteres til understregninger.
			// En tidszone er kun nyttig, hvis dine history*-indstillinger bruger kalenderbaserede perioder (for at bestemme midnat).
			// Brugergrænsefladen bruger den aktuelle brugers tidszone fra indstillingerne. API'et har ingen sådan indstilling, så du skal angive den i anmodningen.
		// ========== KOLONNER: ==========
		// Variablerne column* bestemmer regnearkets kolonner (se formularen på eksportsiden for forklaring af hver kolonne).
		// Alle er 0 som standard (kolonnen medtages ikke), bortset fra Code.
		"columnCode"		: 1,  // (Denne kan ikke fjernes; der er altid en kolonne med hvert produkts REF-CODE).
		"columnName"		: 1,  // Produktnavn.
		"columnCategories"	: 1,  // Kategorier, som produktet tilhører ("Category 1; Category 2" i én celle).
		"columnComments"	: 1,  // Produktkommentarer.
		"columnCreated"		: 1,  // Produktets oprettelsesdato YYYY/MM/DD (i vores system).
		"columnCustom"		: 1,  // Produkternes brugerdefinerede felter (én kolonne pr. unik variabel på tværs af produkterne).
		"columnPrice"		: 1,  // Produktpris i den ønskede valuta (IKKE produktets egen valuta).
		"columnCost"		: 1,  // Produktets kostpris (i ...).
		"columnMargin"		: 1,  // Produktets dækningsgrad i procent baseret på pris og kostpris.
		"columnRank"		: 1,  // Min prisplacering.
		"columnInRank"		: 1,  // Min prisplacering blandt varer på lager.
		"columnMyWebsite"	: 1,  // URL til mit eget websted.
		"columnReprice"		: 1,  // Beregnet prisjusteringsbeløb (i ...).
		"columnRepricingRule"	: 1,  // Navn på prisjusteringsregel.
		"columnRecommended"	: 1,  // Anbefalet pris (se hjælpen på eksportsiden).
		"columnCompUrls"	: 1,  // Konkurrent-URL'er (én pr. kolonne).
		"columnCompUrlsJoin"	: 1,  // Konkurrent-URL'er (adskilt med mellemrum i én celle).
		"columnCompMinMaxAvg"	: 1,  // Tilføjer 3 kolonner: konkurrenternes minimum/maksimum/gennemsnit.
		"columnInCompMinMaxAvg"	: 1,  // Tilføjer 3 kolonner: minimum/maksimum/gennemsnit for konkurrenter MED VAREN PÅ LAGER.
		"columnCompPrice"	: 1,  // Tilføjer én kolonne pr. konkurrent med dens pris (i ...).
		"columnCompStock"	: 1,  // Tilføjer én kolonne pr. konkurrent med lagerstatus (123|IN|OUT).
		"columnCompSales"	: 1,  // Tilføjer én kolonne pr. konkurrent med salg pr. uge.
		"columnCompRank"	: 1,  // Tilføjer én kolonne pr. konkurrent med dens placering blandt alle (inklusive dig).
		"columnCompInRank"	: 1,  // Tilføjer én kolonne pr. konkurrent med dens placering blandt konkurrenter med varen på lager (inklusive dig).
		// ========== SKJULTE AVANCEREDE PARAMETRE: ==========
		// Der findes også nogle udokumenterede muligheder, som f.eks. bruges af vores skabelon "pricezag_backup".
		"originalCurrencies"	: 1,  // I stedet for at konvertere beløb til den angivne valuta og få numeriske celler, vises værdierne som tekst med oprindelig valuta ("123.90 USD").
		"keepUrlLabels"		: 1,  // Normalt fjerner vi etiketterne fra konkurrent-URL'er. Denne indstilling beholder dem (nyttigt til sikkerhedskopier).
		"csvSeparator"		: ";",  // Hvis CSV-formatet skal bruge et andet skilletegn end komma eller tabulator.
		"csvNoQuote"		: 1,  // Undgå, at CSV nogensinde bruger anførselstegn ("). Dette kan gøre formatet ugyldigt.
	}
] }
// En enkel måde at downloade en CSV-sikkerhedskopi på er:
// 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 - Omdøb eller slet en regnearksskabelon

Dette svarer til det, du kan gøre i din konto ved at gå til siden Export og klikke på Edit Presets.
Her kan du kun OMDØBE eller SLETTE en skabelon. Brug handlingen spreadsheetDownload ovenfor, hvis du vil oprette en ny skabelon eller ændre en eksisterende.
{ "actions" : [
	{
		"a"		: "spreadsheetPresetEdit",
		"preset"	: "Some Preset Name",  // Skabelonens nuværende navn.
		"newName"	: "The Renamed Preset",  // For at omdøbe denne skabelon.
		"delete"	: 1,  // Dette sletter skabelonen "preset" fra din konto.
		// BEMÆRK: Du kan ikke slette en skabelon, der bruges til automatisk eksport (giver fejl).
		// Du skal først slette de planlagte automatiske eksporter (se eksportsiden).
	}
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetPresetEdit",
			"ok"	: 1,
		},
		...
	]
}

spreadsheetAutoCreate - Opret en ny automatisk regnearkseksport

Dette svarer til det, du kan gøre i din konto ved at gå til siden Export og klikke på Add a new Auto-Export.
{ "actions" : [
	{
		"a"			: "spreadsheetAutoCreate",
		"preset"		: "The Preset Name",
		"email"			: "john@example.net",
		"currency"		: "USD",  // (valgfri) Standard er "preset", som bruger skabelonens valuta.
		"attach"		: "link",  // (valgfri, standard "attach") "attach" for vedhæftet fil eller "link" for direkte link til hostet fil.
		"everyMonday"		: 1,  // Send regnearket hver mandag.
		"everyTuesday"		: 1,  // ... (og tilsvarende for hver ugedag frem til "everySunday").
		"everyMonthDay1"	: 15,  // Send den 15. i hver måned.
		"everyMonthDay2"	: 21,  // ... og også den 21.
		"everyMonthDay3"	: "last",  // ... og også den sidste dag i hver måned.
			// everyMonthDay* kan være 0 til 9, altså højst 10 dage pr. måned.
		"time"			: "3:59pm",  // "15.59" fungerer også og konverteres til "3:59pm". "0:9", "0.09", "00:09" og "0:09am" fungerer ens.
		"timezone"		: "America/Los_Angeles",  // (valgfri, standard "UTC") Formatet er stien til Linux-mapperne i /usr/share/zoneinfo.
			// Mellemrum i bynavne konverteres til understregninger.
	}
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetAutoCreate",
			"ok"	: 1,
			"id"	: "5gwi6fqa",  // Referencenummer for denne automatiske eksport til senere redigering (se spreadsheetAutoEdit nedenfor).
		},
		...
	]
}

spreadsheetAutoEdit - Rediger en automatisk regnearkseksport

Dette svarer til det, du kan gøre i din konto ved at gå til siden Export og klikke på en Edit-knap på listen under AUTO-EXPORT TO EMAIL.
{ "actions" : [
	{
		"a"			: "spreadsheetAutoEdit",
		"id"			: "5gwi6fqa",  // Referencenummer for den automatiske eksport, der skal redigeres.
			// Du får ID'et i svaret fra spreadsheetAutoCreate, men kan også se det i titlen på pop op-vinduet, når du klikker på Edit for en automatisk eksport.
		"disabled"		: 1,  // (valgfri) 0 for at aktivere en deaktiveret automatisk eksport.
		"delete"		: 1,  // (valgfri) Slet denne automatiske eksport helt.
		// ===== Følgende felter (alle valgfrie) svarer til spreadsheetAutoCreate ovenfor =====
		"preset"		: "The Preset Name",
		"email"			: "john@example.net",
		"currency"		: "USD",
		"attach"		: "link",
		"everyMonday"		: 1,  // ADVARSEL: Hvis du angiver mindst én every*-variabel, slettes ALLE eksisterende every*-variabler.
		"everyMonthDay1"	: 15,  // Hvis "everyFriday"=1 før ændringen, fjerner angivelse af "everyMonthDay3" altså denne "everyFriday".
		// ... og så videre (se spreadsheetAutoCreate for alle every*-variabler).
		"time"			: "3:59pm",
		"timezone"		: "America/Los_Angeles",
	}
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetAutoEdit",
			"ok"	: 3,  // Antal foretagne ændringer.
		},
		...
	]
}

Konkurrenter og andet

competitorDeleteAll - Fjern en konkurrent fra alle produkter eller kategorier

Dette massesletter en konkurrents URL'er fra enten alle produkter eller produkterne i bestemte kategorier.
ADVARSEL: Konkurrent-URL'erne slettes straks og permanent fra din konto og kan ikke gendannes.
Dette er samme funktion, som brugergrænsefladen bruger, når du åbner en konkurrents side og klikker på Delete from all Products eller åbner en kategoriside og klikker på (X)-ikonet på listen over konkurrenter.
{ "actions" : [
	...
	{
		"a"		: "competitorDeleteAll",
		"domain"	: "competitordomain.com",
		"categories"	: ["The Category 1", "The Category 2"],  // (valgfri) Hvis udeladt, skal du bruge "allProducts" = 1.
		"allProducts"	: 1,  // (valgfri) Fjern fra alle produkter ("categories" må IKKE angives).
		// Brug enten "categories" eller "allProducts", ikke begge og ikke ingen.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "competitorDeleteAll",
			"ok"	: 10,  // Antal slettede URL'er.
		},
		...
	]
}

mathEdit - Angiv/rediger prisberegninger for et konkurrentdomæne

Det er samme funktion, som brugergrænsefladen bruger, når du går til Domains, klikker på et konkurrentdomæne i listen og derefter på Mathematically alter the price. Alt, hvad du kan indtaste i den formular, kan også indstilles via API'et med denne handling. mathEdit.
Klik gerne på de grønne spørgsmålstegn i din konto for at få detaljer om de enkelte felter.
{ "actions" : [
	...
	{
		"a"		: "mathEdit",
		"domain"	: "competitordomain.com",
		"clear"		: 1,  // (valgfri) Deaktiver alle beregninger for domænet (sletter alle tidligere indstillinger).
		// Hvis clear:1 er angivet, må du ikke angive andet nedenfor, da det giver en fejl.
		"math"	: [  // Array med beregningsblokke, der skal anvendes.
			{  // Dette er et beregningsblokobjekt, og alle felter er valgfrie.
				"categories"		: ["Category 1", "Category 2"],  // Kun for produkter fra disse kategorier.
				"theirPriceMin"		: 1234.90,  // Kun når deres pris er større end eller lig med N.
				"theirPriceMinCurrency"	: "USD",  // Valuta ("original" betyder samme valuta som på hjemmesiden).
				"theirPriceMax"		: 1234.90,  // ... mindre end eller lig med N.
				"theirPriceMaxCurrency"	: "USD",  // Valuta (...).
				"themMeMin"		: -20.00,  // Kun når [dem-mig] er større end eller lig med N (se brugergrænsefladen).
				"themMeMinCurrency"	: "USD",  // Valuta eller "%" af din egen pris (IKKE "original" her).
				"themMeMax"		: -1.5,  // ... mindre end eller lig med N.
				"themMeMaxCurrency"	: "%",  // Valuta (...).
				"addPre"		: -10.00,  // Beløb, der lægges til før multiplikation (eller trækkes fra, hvis negativt).
				"addPreCurrency"	: "USD",  // Valuta ("original" betyder samme valuta som på hjemmesiden).
				"multiply"		: 1.1,  // Gang med denne faktor.
				"divide"		: 1.1,  // ELLER divider (angiv ikke begge dele).
				"addPost"		: 5.00,  // Beløb, der lægges til efter multiplikation (eller trækkes fra, hvis negativt).
				"addPostCurrency"	: "USD",  // Valuta (...).
				// Virker det uoverskueligt? Se vores enkle eksempel efter svaret.
			},
			... // Højst 10 blokke i alt (beregningerne udføres i rækkefølge).
		],
		// BEMÆRK: Vi understøtter ikke ændring af kun én variabel eller beregningsblok. Angiver du "math"-arrayet, erstattes alle eksisterende indstillinger.
		// BEMÆRK: En beregningsblok uden multiplikation/division (mangler eller er 1) og uden addPre!=0 eller addPost!=0 ignoreres,
		// og hvis alle blokke ignoreres, svarer det til at slette alle beregninger med clear:1.
		// Beregningerne skal altså rent faktisk ændre noget for at blive gemt.
		// TIP: Hvis du vil deaktivere beregningerne for et domæne midlertidigt uden at slette dem,
		// kan du angive categories: ["Some Empty Existing Category"].
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "mathEdit",
			"ok"	: 3,  // Antal ændrede beregningsblokke (fjernelse/nulstilling tæller som en ændring).
		},
		...
	]
}
ENKELT EKSEMPEL - Fjern 10 % afgift fra alle priser på amazon.co.uk:
{ "actions" : [
	{
		"a"		: "mathEdit",
		"domain"	: "amazon.co.uk",
		"math"		: [
			{
				"divide"	: 1.1
			}
		]
	}
] }

Flere eksempler

Disse anmodninger er POST data sendt til https://pricezag.com/api/v3/MYAPIKEY
▶ EKSEMPEL 1 - Opdater et produkts kostpris
ANMODNING:
{
	"actions" : [
		{
			"a"		: "productEdit",
			"code"		: "SKU-1234",
			"cost"		: 140.50,
			"costCurrency"	: "EUR"
		}
	]
}
SVAR:
{
	"ok"		: 1,  // Returnerer 0, hvis SKU-1234 allerede havde den kostpris.
	"errors"	: 0,  // Returnerer 1, hvis SKU-1234 ikke fandtes.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "productEdit",
			"ok"	: 1  // Returnerer 0, hvis SKU-1234 allerede havde den kostpris, og -1 hvis produktet ikke fandtes.
		}
	]
}

▶ EKSEMPEL 2 - Hent et produkt, der ikke findes
ANMODNING:
{
	"actions" : [
		{
			"a"		: "productGet",
			"code"		: "NON-EXISTING-SKU",
			"currency"	: "USD"
		}
}
SVAR:
{
	"ok"		: 0,  // fordi ingen handling returnerede ok>0.
	"errors"	: 1,  // fordi én handling returnerede ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "productGet",
			"ok"	: -1,  // Sådan ved du, at handlingen mislykkedes.
			"error"	: "Sorry, the product #NON-EXISTING-SKU does not exist. Maybe someone else just removed or renamed it?"
		}
	]
}

▶ EKSEMPEL 3 - Opret en kategori, en prisjusteringsregel og derefter to produkter knyttet til dem
ANMODNING:
{
	"actions" : [
		{
			"a"		: "categoryCreate",
			"name"		: "My New Category"
		},
		{
			"a"		: "repricingCreate",
			"name"		: "My New Repricing Rule",
			"init"	: {
				"target"	: "cheapest_n",
				"var_n"		: 2,
				"plusAmount"	: 0,
				"plusCurrency"	: "%"
				// Dette svarer til "Sæt min pris til midtpunktet mellem de 2 billigste konkurrenter".
			},
			"never"	: [
				{
					"target"	: "cost",
					"direction"	: "below",
					"plusAmount"	: 5,
					"plusCurrency"	: "%"
					// Dette svarer til "Men aldrig under min kostpris + 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",  // Samme regelnavn som vi lige oprettede.
			"categories"	: ["My New Category"],	// Samme kategorinavn som vi lige oprettede.
			// ... selv om productCreate alligevel opretter manglende kategorier, så categoryCreate var ikke nødvendigt.
			"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,  // fordi alle 4 handlinger returnerede ok>0.
	"errors"	: 0,  // fordi ingen handling returnerede ok<0.
	"actionsCount"	: 4,
	"actions" : [
		{
			"a"	: "categoryCreate",
			"ok"	: 1
		},
		{
			"a"	: "repricingCreate",
			"ok"	: 1
		},
		{
			"a"	: "productCreate",
			"ok"	: 1
		},
		{
			"a"	: "productCreate",
			"ok"	: 1
		}
	]
}

▶ EKSEMPEL 4 - Sammenlæg to kategorier i en anden og slet de to oprindelige kategorier
ANMODNING:
{
	"actions" : [
		{
			"a"			: "categoryCopy",
			"categoriesFrom"	: ["Original Category 1", "Original Category 2"],
			"deleteMode"		: "cat",
			// Bemærk, at "removeMode":"cat" ikke behøves, fordi deleteMode alligevel sletter de to kategorier.
			"categoriesTo"		: ["A New Category"]
		}
}
SVAR:
{
	"ok"		: 1,  // fordi én handling returnerede ok>0.
	"errors"	: 0,  // fordi ingen handling returnerede ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"			: "categoryCopy",
			"ok"			: 3,  // fordi 3 kategorier blev ændret: de to oprindelige blev slettet, og én målkategori blev oprettet.
			"categoriesCreated"	: 1,
			"categoriesDeleted"	: 2,
			"categoriesModified"	: 0,
			"productsCount"		: 123
		}
	]
}

▶ EKSEMPEL 5 - Ændr N-variablen og retningen for en alarmregel
ANMODNING:
{
	"actions" : [
		{
			"a"		: "alertRuleEdit",
			"email"		: "john@example.net",
			"ruleNumber"	: 3,
			"rule"		: {
				"var_n"		: 1.5,
				"direction"	: "drop"
			}
		}
}
SVAR:
{
	"ok"		: 1,  // fordi én handling returnerede ok>0.
	"errors"	: 0,  // fordi ingen handling returnerede ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "alertRuleEdit",
			"ok"	: 2  // fordi 2 variabler blev ændret korrekt.
		}
	]
}