PriceZag API - Koble prisdata til systemene dine

Bruk PriceZags JSON API til å hente konkurrenters priser og lagerstatus, administrere produkter og regler for automatisk prisjustering, laste ned rapporter og automatisere arbeidsflyter.

Raskt eksempel med curl

Vi vet at utviklere gjerne vil se fungerende kode først. Disse kommandoene oppretter et testprodukt og henter det deretter. Erstatt MYAPIKEY med API-nøkkelen til kontoen din (se API-nøkkel).
Opprett 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"}]}'
(kjører du kommandoen en gang til, får du en feil fordi produktet allerede finnes)
Nå kan du hente produktet igjen:
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 verktøyet som formaterer JSON-svaret i terminalen)

Oversikt

Hva du kan gjøre med PriceZag API

Med PriceZags JSON API kan skriptene og forretningssystemene dine arbeide direkte med konkurrentprisene og lagerdataene vi overvåker. Hent produktdata, administrer produkter og kategorier, beregn beløp basert på regler for automatisk prisjustering, sett opp varsler, og last ned tilpassede regneark. Du kan bruke API-et med enhver nettbutikkplattform eller ethvert programmeringsspråk som kan sende HTTPS-forespørsler og behandle JSON.

Du kan også be AI-assistenten du foretrekker om å skrive skriptene for deg. Gi den nettadressen til denne dokumentasjonen (https://pricezag.com/integrations/api), forklar hva du vil automatisere, og oppgi hvilket programmeringsspråk eller hvilken nettbutikkplattform du bruker. Hold API-nøkkelen privat - ikke lim den inn i en AI-samtale.

PriceZag tar seg av overvåkingen på plattformen vår, så API-et er valgfritt. Det er nyttig når du vil koble egne systemer til disse dataene. Shopify og WooCommerce har også direkte integrasjoner.

API-nøkkel og tillatelser

Åpne Automation > API i PriceZag-kontoen din. Klikk på Reveal the current API key for å se den gjeldende nøkkelen, eller Change the API key for å erstatte den. Begge operasjonene krever kontopassordet ditt. Brukeren din må ha de nødvendige tillatelsene for å vise eller opprette API-nøkler. Kontakt en kontoadministrator hvis du mangler tillatelsene.

Hold API-nøkkelen hemmelig. Den kan gi tilgang til omfattende endringer i kontodata, inkludert sletting. Ikke legg nøkkelen i offentlige kodearkiver, kode som kjøres i nettleseren, eller AI-samtaler. Hvis noen skal hjelpe deg med en integrasjon, opprett en PriceZag-bruker med riktige tillatelser, og bytt API-nøkkel ved behov.

API-tilgang avhenger av abonnementet ditt. Med full API-tilgang kan skriptene dine arbeide med alle produktene. Uten full tilgang kan API-et bare nå de 10 første produktene sortert alfanumerisk etter referansekode. Har du for eksempel 1 000 produkter med koder fra SKU0001 til SKU1000, kan API-et få tilgang til SKU0001 til og med SKU0010. Den 14 dagers gratis prøveperioden inkluderer full API-tilgang. Du kan også aktivere full API-tilgang som et tillegg til abonnementet.

API-aktivitetslogg og siste forespørsel

Siden Automation > API i kontoen din viser tidspunktet for siste API-forespørsel og har knappen API Activity Log. Sjekk dette hvis et skript ikke fungerer: Du kan se om forespørslene nådde PriceZag og undersøke feil eller uventede endringer.

Endringer gjort via API-et vises også i History of Edits i hele kontoen under brukernavnet API. For eksempel kan endringshistorikken for et produkt vise Price edited by API i stedet for Price edited by JOHN. PriceZag støtter flere brukere på samme konto, slik at du kan skille automatiske endringer fra endringer gjort av teammedlemmer.

Forespørsels-URL og metoder

Alle API-forespørsler bruker samme HTTPS-URL. Send POST-forespørsler til den, og erstatt MYAPIKEY med nøkkelen din:

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

Det du vil gjøre med API-et ("actions"), og parameterne hører hjemme i JSON-delen av forespørselen, ikke i URL-en.
Send et JSON-objekt med én eller flere handlinger i POST-forespørselen. URL-en er den samme enten du henter et produkt, oppdaterer priser eller laster ned et regneark.

Kan du ikke sende POST?
Som en siste utvei kan du sende en GET-forespørsel med JSON-innholdet Base64-kodet i ?data=-URL-parameteren. URL-er har lengdebegrensninger, så POST anbefales sterkt.

Slik fungerer handlinger

Det vi kaller en handling, er en operasjon i kontoen din, som å redigere et produktfelt, endre en regel for automatisk prisjustering eller hente prisene fra alle konkurrenter for et produkt.
API-et og brukergrensesnittet (UI) vårt bruker de samme funksjonene i systemet, så nesten alle handlinger i grensesnittet kan også utføres via API-et.
Når du sender en API-forespørsel, inneholder JSON-dataene dine et array med alle handlingene du vil utføre, fra 1 til maksimalt 1 000 per forespørsel. Du kan for eksempel endre navn på 3 produkter og opprette en ny kategori i én forespørsel med 4 handlinger. Du kan også hente data om 1 000 produkter samtidig med 1 000 "productGet"-handlinger.
Handlingene utføres i rekkefølgen de står i arrayet. Hvis du først oppretter en regel for automatisk prisjustering og deretter knytter produkter til den, må handlingene stå i denne rekkefølgen, slik at regelen finnes når produktene endres.
Rull ned for å se listen over alle tilgjengelige handlinger.

JSON-objektet i forespørselen din

For skript og AI-generert kode: Referanseeksemplene nedenfor inneholder //-kommentarer og ...-plassholdere for å forklare feltene. Dette er illustrasjoner, ikke gyldig JSON som kan sendes uendret. Fjern kommentarer og plassholdere før du sender en forespørsel. De to curl-eksemplene ovenfor har gyldig JSON i forespørselen.

Alle POST-dataene må være ett JSON-objekt {...} som inneholder en array med handlinger som skal utføres.
{
	"stopOnFailure"	: 1,  // (valgfritt) Som standard fortsetter systemet til neste handling selv om en handling mislykkes. Sett til 1 for å stoppe ved feil.

	// Array med alle handlinger:
	"actions" : [
		// Handling 1:
		{
			"a"	: "someActionName",  // Handlingsnavnet angis alltid i feltet "a" i hvert handlingsobjekt.
			"xx"	: "some parameter this action needs"	// Alle andre felter er parametere som handlingen trenger.
		},
		// 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 feil i forespørselens format eller hvis kontoen for eksempel er deaktivert, returnerer serveren text/plain med feilmeldingen.
Hvis forespørselen er korrekt, får du normalt et JSON-objekt som svar, bortsett fra enkelte handlinger som er merket som unntak (for eksempel nedlasting av regneark). Det ser du på svarheaderen Content-Type: application/json.
Vår HTTP-svarkode er:
► 200 når alle handlinger lyktes (det nøytrale resultatet ok=0 regnes som vellykket)
► 406 når noen handlinger lyktes og andre mislyktes.
► 422 når alle handlinger mislyktes, men ikke av årsakene nedenfor.
► 400 når JSON-objektet som ble mottatt ikke kunne dekodes.
► 403 når autentiseringen mislyktes (vanligvis på grunn av feil API-nøkkel).
Du kan bruke disse statuskodene direkte i skriptene dine. Trenger du flere detaljer, gir JSON-objektet som returneres mer informasjon:
{
	"ok"		: 15,  // Antall handlinger som lyktes (handlingens ok>0).
	"errors"	: 0,  // Antall handlinger som ga feil (handlingens ok<0).
	"actionsCount"	: 20,  // Totalt antall opprinnelig forespurte handlinger (størrelsen på arrayen "actions").
	// MERK: Dette viser at 5 handlinger returnerte ok=0 (ingen feil, men heller ingen endring).
	
	// Array med alle opprinnelig forespurte handlinger (i samme rekkefølge):
	"actions" : [
		...
		// Svarobjekt for hver handling:
		{
			"a"	: "someActionName",
			"ok"	: 4,		// Resultat: >0 = vellykket, 0 = ingen endring, <0 = feil.
						// 0 kan for eksempel skje hvis du setter en produktpris til verdien den allerede har.
						// -1 kan forekomme hvis produktet ikke finnes.
						// Betydningen av >0 avhenger av handlingen. Ofte er det antall felter eller elementer som faktisk ble endret.
			"error"	: "...",  // Feilmelding hvis ok < 0.
						// Feilmeldingene våre er svært detaljerte. Lagre dem i en logg,
						// siden de inneholder det du trenger for å forstå feilen.
			...	// Andre data som denne handlingen returnerer.
		},
		...
	]
}

Eksempler?

Noen ganger er eksempler enklere å forstå. Se flere eksempler helt nederst på denne siden.

Forespørselsgrenser og planlegging

Vi har en brannmur som beskytter oss og deg mot angrep og store mengder forespørsler. Hvis brannmuren blokkerer en vert, kan nettstedet vårt virke utilgjengelig (ingen tilkobling, intet svar, ingen ping).
For å unngå at legitime forespørsler blir blokkert:
► Bruk aldri feil API-nøkkel; brannmuren tolererer svært få forsøk med feil nøkler (det samme gjelder feil passord på nettstedet vårt).
► Samle mange handlinger i én forespørsel i samme JSON-objekt (maksimalt 1 000). Hvis du skal opprette 1 000 produkter, sender du én forespørsel, ikke 1 000.
► Hvis du må sende mange forespørsler, vent 500 ms mellom dem og gjenbruk den samme HTTPS-forbindelsen. Det er en vanlig feil å åpne en ny forbindelse for hver forespørsel. Mange forespørsler er normalt bare nødvendig hvis du skal oppdatere hundretusenvis av produkter på én gang (med 1 000 handlinger per forespørsel).
Vi har ingen fast grense for forespørselsfrekvensen. Brannmuren vurderer dusinvis av parametere. Bruk sunn fornuft.
 
Planlagte forespørsler:
Hvis du planlegger regelmessige API-forespørsler, legg inn en tilfeldig forsinkelse slik at de ikke alltid sendes ved sekund 0 i hvert minutt. Mange kunder sender samtidig. Når forespørslene fordeles over tid, blir svarene ofte raskere, og risikoen for tidsavbrudd ved høy belastning reduseres.

Alle tilgjengelige API-handlinger

Hver handling nedenfor er dokumentert med parametere og eksempler på forespørsler og svar. Navigasjonen til venstre lenker direkte til hver handling.

Produkter

HandlingFormål
productCreateOpprett et nytt produkt
productEditRediger et eksisterende produkt
productCompetitorsRediger konkurrent-URL-ene for et produkt (uten å overskrive alle)
productCategoriesRediger kategorier for ett eller flere produkter (uten å overskrive alle)
productRepricingKnytt mange produkter til en regel for automatisk prisjustering
productDeleteSlett ett eller flere produkter
productGetHent et produkt (og konkurrentdataene)
productGetAllHent alle produkter (og konkurrentdataene deres)

Kategorier

HandlingFormål
categoryCreateOpprett en ny kategori
categoryEditRediger en eksisterende kategori
categoryDeleteSlett én eller flere kategorier
categoryCopyKopier/flytt produkter mellom kategorier
categoryGetHent en kategori
categoryGetAllHent alle kategorier

Prisvarsler

HandlingFormål
alertRecipientCreateOpprett en ny varselmottaker
alertRecipientEditRediger en mottaker og/eller varslingsreglene
alertRecipientDeleteSlett en varselmottaker
alertRuleEditRediger en eksisterende varslingsregel for en mottaker
alertRuleCreate ?Denne handlingen finnes ikke. Bruk alertRecipientEdit med en "rulesAdd"-array i stedet.
alertRuleDelete ?Denne handlingen finnes ikke. Bruk alertRecipientEdit med en "rulesRemove"-array i stedet.
alertGetAllHent alle varselmottakere og varslingsreglene deres

Regler for automatisk prisjustering

HandlingFormål
repricingCreateOpprett en ny prisjusteringsregel
repricingEditRediger en eksisterende prisjusteringsregel
repricingDeleteSlett en prisjusteringsregel
repricingGetAllHent alle prisjusteringsregler

Regneark

HandlingFormål
spreadsheetDownloadLast ned et regneark
spreadsheetPresetEditGi nytt navn til/slett en regnearkmal
spreadsheetAutoCreateOpprett automatisk eksport av regneark
spreadsheetAutoEditRediger automatisk eksport av regneark

Konkurrenter og mer

HandlingFormål
competitorDeleteAllFjern en konkurrent fra alle produkter eller kategorier
mathEditAngi/rediger prisberegninger for et konkurrentdomene

Produkter

productCreate - Opprett et nytt produkt

Dette er den samme funksjonen som brukergrensesnittet bruker på siden New Product.
{ "actions" : [
	...
	{
		"a"		: "productCreate",
		"code"		: "UNIQUE-REF-CODE",  // 1 til maksimalt 80 tegn ([a-z\d][a-z\d_-]{0,78}[a-z\d]); skiller ikke mellom store/små bokstaver (konverteres til store).
		"name"		: "The Product Name",  // 1 til maksimalt 200 tegn.
		"price"		: 1234.90,  // Pass på komma og punktum: Ingen tusenskilletegn, og desimaltegnet må være punktum.
		"currency"	: "USD",
		"cost"		: 1234.90,  // (valgfritt)
		"costCurrency"	: "USD",  // Påkrevd hvis "cost" er oppgitt.
		"repricingRule"	: "The Rule Name",  // (valgfritt) Tilknyttet prisjusteringsregel (tom streng = deaktivert, manglende regel = feil).
		"myWebsite"	: "https://...",  // (valgfritt) URL eller shopify:productId:variantId eller woocommerce:productId(:variationId).
		"competitors"	: ["https://...", "https://..."],  // (valgfritt)
		"categories"	: ["The Category 1", "The Category 2"],  // (valgfritt) Produktets kategorier (manglende kategorier opprettes).
		"comments"	: "Some comments\nAnd another line",  // (valgfritt) Maksimalt 1 000 UTF-8-tegn.
		"custom_someFieldName1"	: "Value of custom field",		// (valgfritt)
		"custom_someFieldName2"	: "Value of other\nCustom\tField",  // (valgfritt)
		// Egendefinerte felter er til intern bruk. De kan for eksempel vises som kolonner ved eksport av regneark.
		// Maksimalt 20 egendefinerte felter per produkt. Navnet kan ha høyst 40 bokstaver, tall eller understreker (skiller mellom store/små bokstaver; uten prefikset "custom_", altså 47 totalt).
		// Verdien kan være høyst 500 byte (ofte, men ikke alltid, samme antall tegn). Du kan angi et tall (custom_varname:123),
		// men API-et returnerer alltid en streng (custom_varname:"123"). Konverter verdien selv ved behov.
		// Slett et egendefinert felt ved å sette verdien til "". Dette gjelder productEdit, ikke productCreate.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productCreate",
			"ok"	: 1,
			"code"	: "REF-CODE",  // Endelig kode i databasen (spesialtegn i den innsendte koden kan bli konvertert).
		},
		...
	]
}

productEdit - Rediger et eksisterende produkt

Dette er samme funksjon som brukergrensesnittet bruker når du redigerer et felt på produktsiden. Grensesnittet sender ett felt av gangen, mens API-et for eksempel kan endre både navn og pris i én forespørsel.
{ "actions" : [
	...
	{
		"a"		: "productEdit",
		"code"		: "REF-CODE",
		...		// Bruker samme parametere som productCreate; alle er valgfrie.
		"newCode"	: "REF-CODE-RENAMED",  // (valgfritt)
		"competitors"	: ["https://...", "https://..."],  // Hvis oppgitt, OVERSKRIVES ALLE eksisterende konkurrent-URL-er.
		// Bruk handlingen productCompetitors hvis du bare vil legge til eller fjerne enkelte konkurrenter i den eksisterende listen.
		"categories"	: ["The Category 1", "The Category 2"],  // Hvis oppgitt, OVERSKRIVES de gjeldende kategoriene. Bruk ellers productCategories eller categoryEdit.
		"custom_someFieldName"	: "New value or empty to delete that custom field",
		// Det kan være maks 20 egendefinerte felter per produkt. Slett eventuelt gamle felter ved å sette verdien til "" før du legger til nye.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productEdit",
			"ok"	: 3,  // Antall endringer (f.eks. min pris + 2 konkurrent-URL-er = 3).
			"code"	: "REF-CODE",  // Endelig (ny) kode i databasen (spesialtegn kan bli konvertert).
		},
		...
	]
}

productCompetitors - Rediger konkurrent-URL-ene for et produkt

Rediger konkurrent-URL-ene for et produkt uten å overskrive alle (i motsetning til handlingen productEdit ).
{ "actions" : [
	...
	{
		"a"			: "productCompetitors",
		"code"			: "REF-CODE",
		"competitorsAdd"	: ["https://...", "https://..."],  // (valgfritt) Legg disse konkurrent-URL-ene til de eksisterende.
		"competitorsRemove"	: ["https://...", "example.com/a0ff80...5f00", "example.net"],  // (valgfritt) Fjern disse konkurrentene. Hvert element kan være:
		// > URL-en (inkludert eventuelle hashtag-modifikatorer). Etikett er valgfritt.
		// > Konkurrentens "ref" (returnert av andre handlinger: rotdomenet etterfulgt av en MD5-hash på 32 tegn).
		// > Rotdomenet eller hele vertsnavnet; alle konkurrent-URL-er fra dette domenet fjernes fra produktet.
		// MERK: "competitorsAdd" og "competitorsRemove" kan også være strenger i stedet for arrayer med ett element.
		// Fjerning skjer før tillegg, slik at du kan fjerne et helt domene og deretter legge til en URL fra det samme domenet.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "productCompetitors",
			"ok"			: 3,  // Antall endrede konkurrent-URL-er.
			"competitorsAdded"	: 2,  // Antall konkurrent-URL-er lagt til produktet.
			"competitorsRemoved"	: 1,  // Antall konkurrent-URL-er fjernet fra produktet.
			// FEIL:
			// > Å legge til en URL som allerede finnes, gir IKKE feil (ok = 0).
			// > Fjerning av en full URL eller URL-"ref" som IKKE finnes, gir en feil (ok = -1).
			// > Fjerning av alle URL-er fra et domene som IKKE finnes, gir IKKE feil (ok = 0).
		},
		...
	]
}

productCategories - Rediger kategorier for ett eller flere produkter

Rediger kategoriene for ett eller flere produkter uten å overskrive alle (i motsetning til productEdit).
Det er samme funksjon som grensesnittet bruker når du går til All Products, velger ett eller flere produkter og klikker på Selected Products > Edit Categories. Der finner du en mer detaljert forklaring.
Du kan også se på handlingen categoryEdit for å velge løsningen som passer best.
{ "actions" : [
	...
	{
		"a"			: "productCategories",
		"code"			: "REF-CODE",  // Skiller ikke mellom store/små bokstaver (streng), ELLER:
		"code"			: ["REF-CODE-1", "REF-CODE-2"],  // Kan også være en array med flere produkter (maksimalt 100 000).
		"categoriesRemove"	: ["The Category 1", "The Category 2"],  // (valgfritt) Fjern først fra disse kategoriene.
		"categoriesRemoveAll"	: 1,  // (valgfritt) Fjern først fra alle kategorier (som i productEdit).
		"deleteEmptyCategories"	: 1,  // Kategorier som blir tomme
		// fordi produkter fjernes fra dem, blir slettet.
		"categoriesAdd"		: ["The Category 1", "The Category 2"],  // (valgfritt) Legg deretter til i disse kategoriene (manglende kategorier opprettes).
		"categoriesAddClear"	: 1,  // (valgfritt) Tøm først kategoriene som produktene skal legges til i.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productCategories",
			"ok"	: 3,  // Antall endrede produkter.
		},
		...
	]
}

productRepricing - Knytt mange produkter til en prisjusteringsregel

Knytt opptil 100 000 produkter til én regel for automatisk prisjustering.
Dette gjør det samme som handlingen productEdit. Men siden hver forespørsel kan inneholde maksimalt 1 000 handlinger, måtte du ha sendt 50 forespørsler for å knytte 50 000 produkter til en bestemt regel. Det ville tatt mye lengre tid.
Hvis du bare vil endre noen få produkter, kan du heller bruke handlingen productEdit.
{ "actions" : [
	...
	{
		"a"			: "productRepricing",
		"repricingRule"		: "The Rule Name",  // Skiller ikke mellom store/små bokstaver; "" (tom, men eksisterende streng) betyr ingen regel (deaktiver prisjustering).
		"products"		: ["REF-CODE-1", "REF-CODE-2"],  // Skiller ikke mellom store/små bokstaver (maksimalt 100 000).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "productRepricing",
			"ok"		: 10,  // Antall endrede produkter.
			// Hvis alle produktene allerede brukte regelen, får du ok=0.
		},
		...
	]
}

productDelete - Slett ett eller flere produkter

ADVARSEL: Produktet og konkurrent-URL-ene slettes umiddelbart og permanent fra kontoen din og kan ikke gjenopprettes.
Det er samme funksjon som grensesnittet bruker når du går til All Products, velger ett eller flere produkter og klikker på Selected Products > Delete.
{ "actions" : [
	...
	{
		"a"	: "productDelete",
		"code"	: "REF-CODE",  // Skiller ikke mellom store/små bokstaver (streng), ELLER:
		"code"	: ["REF-CODE-1", "REF-CODE-2"],  // Kan også være en array for å slette flere produkter (maksimalt 100 000).
		"deleteEmptyCategories"	: 1,  // Kategorier som blir tomme
		// som følge av sletting av produktet/produktene blir også slettet.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "productDelete",
			"ok"	: 2,  // Antall produkter som er slettet.
		},
		...
	]
}

productGet - Hent et produkt

{ "actions" : [
	...
	{
		"a"			: "productGet",
		"code"			: "REF-CODE",  // Skiller ikke mellom store/små bokstaver.
		"currency"		: "EUR",  // (valgfritt) Konverter alle beløp til denne valutaen i stedet for valutaen til produktprisen.
		"withStats"		: 1,  // (valgfritt) Returner statistikkobjektet.
		"noCompetitors"		: 1,  // (valgfritt) Ikke returner konkurrent-arrayen (for å redusere datamengden).
		"noComments"		: 1,  // (valgfritt) Ikke returner kommentarene (...).
		"withScreenshots"	: 1,  // (valgfritt) Returner URL-en til det nyeste skjermbildet for hver konkurrent.
		"sickMax"		: 2,  // (valgfritt, standard 1) 0-3: Returner bare konkurrent-URL-er med feilnivå opptil N.
	},
	...
] }
Returnerer all informasjon om et produkt, inkludert konkurrentenes gjeldende priser og lagerstatus.
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "productGet",
			"ok"			: 1,
			"code"			: "REF-CODE",
			"name"			: "The Product Name",
			"price"			: 1234.90,  // Din egen pris, alltid i opprinnelig valuta.
			"currency"		: "USD",  // Den opprinnelige valutaen til "price".
			"convCurrency"		: "EUR",  // Valutaen til konverterte beløp (enten angitt "currency" eller valutaen til produktprisen).
			"priceConv"		: 1234.90,  // Din egen pris konvertert med "convCurrency", eller lik "price".
			"cost"			: 1234.90,
			"costCurrency"		: "USD",
			"costPriceConv"		: 1234.90,  // Din kostpris konvertert til prisens "currency".
			"costConv"		: 1234.90,  // Din kostpris konvertert til "convCurrency".
			"margin"		: 10.5,  // Prosent (kan være negativ).
			"repricingRule"		: "The Rule Name",  // Disse 3 variablene for automatisk prisjustering MANGLER hvis det ikke brukes automatisk prisjustering.
			"reprice"		: 1234.90,  // Gjeldende beregnet prisjusteringsbeløp basert på repricingRule.
			"repriceCurrency"	: "USD",  // Samme som "convCurrency", tatt med her for tydelighetens skyld.
			"myWebsite"		: "https://...",
			"created"		: 1234567890,  // Epoch-tidspunkt da produktet ble opprettet.
			"createdBy"		: "SOMEUSER",  // Brukernavn eller "API".
			"edited"		: 1234567890,  // Epoch-tidspunkt for siste redigering (hvis relevant).
			"editedBy"		: "SOMEUSER",  // Brukernavn eller "API".
			"comments"		: "Some comments\nAnd another line",
			"commentsLast"		: 1234567890,  // Epoch-tidspunkt for siste endring av kommentarer (hvis relevant).
			"commentsLastBy"	: "SOMEUSER",  // Brukernavn eller "API".
			"categories"		: ["The Category 1", "The Category 2"],
			"stats"		: {
				// Bare konkurrent-URL-er med feilnivå 0 eller 1 inngår i statistikken, uansett "sickMax".
				// Alle beløp er i "convCurrency", altså enten oppgitt "currency" eller produktets opprinnelige "currency".
				// ADVARSEL: Hvis det ikke finnes noe beløp (f.eks. compIn* når ingen konkurrenter har varen på lager), er verdien 0.
				"rank"			: 1.23,  // Din plassering etter pris (1 = ingen har lavere pris enn deg).
				"rankIn"		: 1.23,  // Din plassering blant konkurrenter med varen på lager.
				"compCount"		: 3,  // Antall konkurrenter med en gyldig pris.
				"compInCount"		: 3,  // Antall konkurrenter som har varen på lager ...
				"compOutCount"		: 3,  // Antall konkurrenter som ikke har varen på lager ...
				"compAvg"		: 123.56,  // Gjennomsnittet for alle konkurrenter.
				"compAvgVsMe"		: 123.56,  // Forskjellen (i convCurrency) mellom din pris og konkurrentenes gjennomsnitt (negativ = du er billigere).
				"compInAvg"		: 123.56,  // Gjennomsnitt for konkurrenter som har varen på lager.
				"compInAvgVsMe"		: 123.56,  // Samme som "compAvgVsMe", men bare for konkurrenter med varen på lager.
				"compLowest"		: 123.56,  // Billigste konkurrent.
				"compLowestVsMe"	: 123.56,  // Samme som "compAvgVsMe", men for den billigste i stedet for gjennomsnittet.
				"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), der hver konkurrent er et objekt:
				...
				{
					"url"		: "https://...",  // Inkluderer eventuelle hashtag-modifikatorer du har lagt til.
					"ref"		: "example.com/123abc...def",
					// URL-referanse (rotdomenet etterfulgt av en MD5-hash på 32 tegn). Slik identifiserer vi URL-er internt.
					"domain"	: "example.com",  // Rotdomenet til denne konkurrenten.
					"price"		: 1234.90,  // Siste pris funnet på nettstedet (etter eventuelle beregninger basert på innstillingene dine).
					"currency"	: "USD",  // Valuta funnet på nettstedet.
					"priceConv"	: 1234.90,  // Pris konvertert til "convCurrency".
					"stock"		: "5",  // Lagerstatus (streng): "A" = tilgjengelig, "2" = 2 på lager, "0" = utsolgt, "" = ukjent.
					"salesWk"	: 123,  // Estimert salg per uke (hvis tilgjengelig; se spørsmålstegnet på produktsiden for forklaring).
					"screenshotURL"	: "https://pricezag.com/.../screenshot.png",
					// Hvis "withScreenshots": URL til det nyeste skjermbildet (offentlig tilgang via denne lange URL-en, uten innlogging).
					"confidence"	: 98,
					// Prosentvis sikkerhet for at vi fant riktig pris (se forklaringen ved å klikke på (?) på produktsiden).
					// Under 70 % (kan endres) betegnes som "upålitelig" på plattformen og vises med spørsmålstegn ved prisen.
					// Dette er uavhengig av feilnivået. En URL kan ha feil selv om vi med sikkerhet fant riktig pris,
					// eller fungere uten feil selv om vi er usikre på om vi fant riktig pris på siden.
					"sick"		: 0,  // URL-ens feilnivå fra 0 til 3.
					// 0: Siste besøk lyktes (vi kunne åpne siden og finne en pris).
					// 1: Siste besøk mislyktes, men vi lyktes nylig (helt normalt, ingen grunn til bekymring).
					// 2: Vi har ikke klart å hente en gyldig pris på flere dager.
					// 3: Vi har ikke klart å hente en gyldig pris på flere uker.
					// MERK: "price" og "priceConv" finnes bare for URL-er med feilnivå 0 eller 1. Nivå 2 og 3 har ingen pris.
				},
				...
			],
			"custom"	: {
				// Dette er de egendefinerte feltene dine. Åpne
				// produktsiden i brukergrensesnittet og klikk på (?) ved CUSTOM FIELDS for en forklaring.
				// Hvis det ikke finnes noen, er hele objektet "custom" utelatt fra svaret.
				"variable_1"	: "value 1",  // Verdiene er alltid strenger, selv når de faktisk er tall,
				"variable_2"	: "value 2",  // og en tom verdi finnes ikke, siden den ville ha slettet feltet.
				...
			}
		},
		...
	]
}

productGetAll - Hent alle produkter

Sørg for at timeout-innstillinger er høye nok, siden serveren kan bruke tid avhengig av antall produkter og konkurrenter.
{ "actions" : [
	...
	{
		"a"			: "productGetAll",
		"currency"		: "EUR",  // (valgfritt) Konverter alle beløp til denne valutaen i stedet for valutaen til hvert produkt.
		"withStats"		: 1,  // (valgfritt) Returner statistikkobjektet.
		"noCompetitors"		: 1,  // (valgfritt) Ikke returner konkurrent-arrayen (for å redusere datamengden).
		"noComments"		: 1,  // (valgfritt) Ikke returner kommentarene (...).
		"withScreenshots"	: 1,  // (valgfritt) Returner URL-en til det nyeste skjermbildet for hver konkurrent.
		"sickMax"		: 2,  // (valgfritt, standard 1) 0-3: Returner bare konkurrent-URL-er med feilnivå opptil N.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "productGetAll",
			"ok"		: 10,  // Totalt antall produkter.
			"products"	: [ // Array med produkter (alfanumerisk rekkefølge etter referansekode), der hvert produkt er et objekt:
				...
				{ ... },  // Produktobjekt som i svaret fra productGet ovenfor.
				...
			],
		},
		...
	]
}
Du kan også bruke handlingen categoryGet.

Kategorier

categoryCreate - Opprett en ny kategori

Dette er den samme funksjonen som brukergrensesnittet bruker på siden Categories når du klikker på knappen New Category. Med API-et kan du i tillegg knytte produkter til kategorien allerede når du oppretter den.
I motsetning til handlinger som godtar både eksisterende og nye kategorier (for eksempel productCreate), mislykkes denne handlingen hvis kategorien allerede finnes.
{ "actions" : [
	...
	{
		"a"		: "categoryCreate",
		"name"		: "The New Category Name",
		"name"		: ["New Category 1", "New Category 2"],  // Kan også være en array.
		"products"	: ["REF-CODE-1", "REF-CODE-2"],  // (valgfritt) Legg disse produktene til kategoriene når de opprettes.
		"comments"	: "Some comments\nAnd another line",  // (valgfritt) Maksimalt 1 000 UTF-8-tegn.
	},
	...
] }

categoryEdit - Rediger en eksisterende kategori

Du kan også se på handlingen productCategories for å velge løsningen som passer best.
{ "actions" : [
	...
	{
		"a"			: "categoryEdit",
		"name"			: "The Category Name",		// Skiller ikke mellom store/små bokstaver.
		"newName"		: "The Category Renamed",  // (valgfritt)
		"products"		: ["REF-CODE-1", "REF-CODE-2"],  // (valgfritt) Overskriv produktlisten.
		"productsAdd"		: ["REF-CODE-1", "REF-CODE-2"],  // (valgfritt) Legg disse produktene til kategorien.
		"productsRemove"	: ["REF-CODE-3", "REF-CODE-4"],  // (valgfritt) Fjern disse produktene fra kategorien (produktene slettes IKKE).
		"comments"		: "To overwrite the comments.",  // (valgfritt) Maksimalt 1 000 UTF-8-tegn.
	},
	...
] }
Feltene "products", "productsAdd" og "productsRemove" gjør alle det samme: De endrer hvilke produkter som tilhører kategorien, men på ulike måter. Bruk bare "products" : []
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryEdit",
			"ok"			: 5,  // Antall utførte endringer.
			// (Navneendring og redigering av kommentarer teller som én hver, det samme gjelder hvert produkt som legges til/fjernes).
			"name"			: "The Category Name",  // Nytt navn hvis endret, ellers det opprinnelige.
			"productsCount"		: 30,  // Nytt antall produkter i kategorien (uavhengig av om antallet er endret).
			"productsAdded"		: 2,  // Antall produkter lagt til kategorien.
			"productsRemoved"	: 2,  // Antall produkter fjernet fra kategorien.
		},
		...
	]
}

categoryDelete - Slett én eller flere kategorier

Det er samme funksjon som grensesnittet bruker når du går til Categories, velger noen kategorier og klikker på Selected Categories > Delete.
{ "actions" : [
	...
	{
		"a"			: "categoryDelete",
		"name"			: "The Category Name",  // Skiller ikke mellom store/små bokstaver (streng), ELLER:
		"name"			: ["Category 1", "Category 2"],  // Kan også være en array for å slette flere kategorier (maksimalt 1 000).
		"deleteProducts"	: 1,
		// Som standard slettes kategorien, mens produktene bare fjernes fra kategorien,
		// men med deleteProducts slettes alle produktene i kategorien uten bekreftelse,
		// og konkurrent-URL-ene deres slettes også uten mulighet for gjenoppretting!
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryDelete",
			"ok"			: 2,  // Antall slettede kategorier.
			"productsCount"		: 123,  // Antall produkter berørt av kategorien/kategoriene.
			"productsDeleted"	: 123,  // Antall produkter slettet som følge av "deleteProducts".
			// MERK: Et produkt som finnes i flere av de oppgitte kategoriene, telles bare én gang.
		},
		...
	]
}

categoryCopy - Kopier/flytt produkter mellom kategorier

Kopier eller flytt produkter fra matchende kategorier til andre nye og/eller eksisterende kategorier. Dette kan også brukes til å SLÅ SAMMEN kategorier (se eksemplene nederst på siden).
Ingen av innstillingene her sletter produkter; de flyttes bare mellom kategorier.
Det er samme funksjon som grensesnittet bruker når du går til Categories, velger noen kategorier og klikker på Selected Categories > Copy & More. Der finner du en mer detaljert forklaring.
{ "actions" : [
	...
	{
		"a"			: "categoryCopy",
		"categoriesFrom"	: ["Category 1", "Category 2"],  // Finn produkter i disse kategoriene (kilden).
		"removeMode"		: "cat",  // (valgfritt) Fjern de tilsvarende produktene fra angitte "categoriesFrom".
		"removeMode"		: "all",  // (valgfritt) Fjern de tilsvarende produktene fra alle kategoriene de tilhører.
		// Hvis removeMode utelates, blir produktene i "categoriesFrom" samtidig som de legges til i "categoriesTo" (kopiering i stedet for flytting).
		"deleteMode"		: "cat",  // (valgfritt) Slett angitte "categoriesFrom" etter at produktene er kopiert.
		"deleteMode"		: "all",  // (valgfritt) Slett alle kategoriene disse produktene tilhører.
		// Hvis deleteMode utelates, vil "categoriesFrom" fortsatt finnes selv om produktene er fjernet med "removeMode".
		"categoriesTo"		: ["Another Category 1", "Another Category 2"],
		// Legg alle matchende produkter til disse målkategoriene (manglende kategorier opprettes).
		"categoriesToClear"	: 1,  // (valgfritt) Tøm først kategoriene som produktene skal legges til i.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryCopy",
			"ok"			: 3,  // Antall endrede kategorier (både kilde og mål).
			// "ok" er summen av categoriesModified + categoriesCreated + categoriesDeleted.
			"categoriesModified"	: 2,  // Antall eksisterende kategorier som er endret (både kilde og mål).
			"categoriesCreated"	: 1,  // Antall nye kategorier som er opprettet.
			"categoriesDeleted"	: 0,  // Antall kategorier slettet som følge av "deleteMode".
			"productsCount"		: 123,  // Antall produkter som samsvarer med angitte "categoriesFrom".
			// MERK: Et produkt som finnes i flere av de angitte "categoriesFrom", telles bare én gang.
		},
		...
	]
}

categoryGet - Hent en kategori

{ "actions" : [
	...
	{
		"a"		: "categoryGet",
		"name"		: "The Category Name",  // Skiller ikke mellom store/små bokstaver.
		"currency"	: "EUR",  // (PÅKREVD hvis withStats eller withProducts) Valuta for statistikken.
		"withStats"	: 1,  // Returner også statistikken (tregere).
		"withProducts"	: 1,  // Returner også produktene i denne kategorien (kan gi store datamengder).
		"noCompetitors"	: 1,  // Hvis withProducts, ikke returner konkurrent-arrayen (for å redusere datamengden).
		"noComments"	: 1,  // Hvis withProducts, ikke returner produktkommentarer (kategorikommentarer returneres fortsatt).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryGet",
			"ok"			: 1,
			"name"			: "The Category Name",
			"created"		: 1234567890,  // Epoch-tidspunkt.
			"createdBy"		: "SOMEUSER",  // Brukernavn eller "API".
			"comments"		: "Comments of this category",
			"commentsLast"		: 1234567890,  // Epoch-tidspunkt for siste endring av kommentarer (hvis relevant).
			"commentsLastBy"	: "SOMEUSER",  // Brukernavn eller "API".
			"productsCount"		: 10,  // Antall produkter i denne kategorien.
			"stats"		: {
				// Dette er statistikken fra kategorisiden i brukergrensesnittet og kolonnene i kategorilisten.
				// Velg dem som kolonner i kategorilisten og klikk på (?) for mer informasjon.
				// Alle beløp er i "currency" som du oppga i forespørselen.
				// ADVARSEL: Hvis det ikke finnes noe beløp (f.eks. compIn* når ingen konkurrenter har varen på lager), er verdien 0.
				"priceAvg"		: 123.45,  // Gjennomsnittet av dine egne priser.
				"costAvg"		: 123.45,  // Bare produkter med kostpris inngår i dette gjennomsnittet.
				"marginAvg"		: 10.5,  // Prosent (kan være negativ; bare produkter med kostpris inngår).
				"rankAvg"		: 1.23,  // Din gjennomsnittlige prisplassering (1 = ingen er billigere enn deg).
				"rankInAvg"		: 1.23,  // Din gjennomsnittlige plassering blant konkurrenter med varen på lager.
				"productsCountComp"	: 9,  // Antall produkter med konkurrenter.
				"productsCountCompIn"	: 7,  // Antall produkter med konkurrenter som har varen på lager.
				"compAvg"		: 123.56,  // Gjennomsnitt av konkurrentenes gjennomsnittspriser.
				"compAvgVsMe"		: 123.56,  // Gjennomsnittlig forskjell (i valutaen) mellom din pris og konkurrentenes (negativ = du er billigere).
				"compInAvg"		: 123.56,  // Samme som "compAvg", men bare konkurrenter med varen på lager.
				"compInAvgVsMe"		: 123.56,  // Samme som "compAvgVsMe", men bare for konkurrenter med varen på lager.
				"compLowest"		: 123.56,  // Samme som "compAvg", men gjennomsnitt av 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 gjennomsnitt av 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 rekkefølge etter referansekode), der hvert produkt er et objekt:
				...
				{ ... },  // Produktobjekt som i svaret fra productGet.
				...
			],
		},
		...
	]
}

categoryGetAll - Hent alle kategorier

I motsetning til categoryGet returnerer handlingen categoryGetAll ikke et objekt med alle detaljene for hvert produkt. Det er fordi samme produkt kan tilhøre flere kategorier, noe som kunne gitt store datamengder med mye gjentakelse. Hvis du vil ha produktdataene, bør du bruke categoryGet for hver kategori eller productGetAll og deretter sortere produktene etter kategoriene deres.
{ "actions" : [
	...
	{
		"a"		: "categoryGetAll",
		"withStats"	: 1,  // Returner også statistikken (tregere).
		"noComments"	: 1,  // Ikke returner kommentarer (for å redusere datamengden).
		"noProducts"	: 1,  // Ikke returner produkt-arrayen (...).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "categoryGetAll",
			"ok"		: 10,  // Totalt antall kategorier (lengden på "categories"-arrayen).
			"categories"	: [ // Array med kategorier (alfabetisk rekkefølge), der hver kategori er et objekt:
				...
				{
					"name"			: "The Category Name",
					"created"		: 1234567890,  // Epoch-tidspunkt.
					"createdBy"		: "SOMEUSER",  // Brukernavn eller "API".
					"comments"		: "Comments of this category",
					"commentsLast"		: 1234567890,  // Epoch-tidspunkt for siste endring av kommentarer (hvis relevant).
					"commentsLastBy"	: "SOMEUSER",  // Brukernavn eller "API".
					"productsCount"		: 2,  // Antall produkter i denne kategorien.
					"products"	: ["REF-CODE-1", "REF-CODE-2"],  // Referansekodene til kategoriens produkter (alfabetisk rekkefølge), med mindre noProducts=1.
					"stats"		: {
						// Hvis "withStats", samme statistikkobjekt som ved categoryGet ovenfor.
						...
					},
				}
				...
			],
		},
		...
	]
}

Prisvarsler

alertRecipientCreate - Opprett en ny varselmottaker

Det er samme funksjon som grensesnittet bruker når du går til Alerts og klikker på New Recipient.
Klikk på de grønne spørsmålstegnene i kontoen din for å få detaljer om hvert felt.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientCreate",
		"email"		: "john@example.net",  // Kan også være et telefonnummer for SMS-varsler; se hjelpen i brukergrensesnittet.
		"name"		: "john",  // Et enkelt visningsnavn (vanligvis fornavn; skiller ikke mellom store/små bokstaver).
		"maxFrequency"	: 1800,  // (valgfritt, standard 7200) Se hjelpen i brukergrensesnittet.
		"simplify"	: 0,  // (valgfritt, standard 1) Aktiver forenkling (se hjelpen i grensesnittet).
		"sleepEnabled"	: 1,  // (valgfritt) Aktiver hvileperiode.
		"sleepFrom"	: "18:30",  // (bare hvis sleepEnabled) 24-timersformat.
		"sleepTo"	: "07:00",  // (bare hvis sleepEnabled) 24-timersformat.
		"timezone"	: "America/Los_Angeles",  // (bare hvis sleepEnabled) Formatet er filstien til Linux-mappene i /usr/share/zoneinfo.
				// Mellomrom konverteres til understreker.
				// Finn tidssonen din i skjemaet [New Recipient] i grensesnittet for å være sikker på at navnet er nøyaktig.
		"status"	: "hold",  // (valgfritt) Angi "hold" eller "disable". Alle andre verdier (f.eks. "") betyr aktiv.
		"rules"		: [...],  // (valgfritt) Innledende varslingsregler (array med regelobjekter), som "rulesAdd" i alertRecipientEdit nedenfor.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientCreate",
			"ok"	: 1,
		},
		...
	]
}

alertRecipientEdit - Rediger en mottaker og/eller varslingsreglene

Det er samme funksjon som grensesnittet bruker når du går til Alerts og klikker på Settings eller Rules for en mottaker.
Klikk på de grønne spørsmålstegnene i kontoen din for å få detaljer om hvert felt.
Variabelen "email" bestemmer hvilken mottaker som oppdateres. Alle andre felter endrer innstillingene til mottakeren.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientEdit",
		"email"		: "john@example.net",  // Gjeldende e-postadresse eller telefonnummer (nøyaktig samme format som returneres av alertGetAll).
		"newEmail"	: "john2@example.net",  // (valgfritt) Ny e-postadresse eller nytt telefonnummer; se hjelpen i grensesnittet.
		"name"		: "john2",  // (valgfritt) Nytt navn.
		"maxFrequency"	: 1800,  // (valgfritt) Se hjelpen i grensesnittet.
		"simplify"	: 1,  // (valgfritt) Aktiver forenkling (se hjelpen i grensesnittet).
		"sleepEnabled"	: 1,  // (valgfritt) Aktiver hvileperiode.
		"sleepFrom"	: "18:30",  // (bare hvis sleepEnabled) 24-timersformat.
		"sleepTo"	: "07:00",  // (bare hvis sleepEnabled) 24-timersformat.
		"timezone"	: "America/Los_Angeles",  // (bare hvis sleepEnabled) Se alertRecipientCreate ovenfor.
		"status"	: "hold",  // (valgfritt) Angi "hold" eller "disable". Alle andre verdier (f.eks. "") gir "active".
		"rules"		: [{ruleObject}, {ruleObject}],  // (valgfritt) Overskriv alle eksisterende regler (tom array fjerner alle).
				  // Ikke oppgi noen "rules"-array hvis du vil beholde de eksisterende reglene.
		"rulesAdd"	: [ // (valgfritt) Legg disse reglene til de eksisterende.
			...
			{  // DETTE ER FORMATET FOR ET REGELOBJEKT:
				"name"		: "me_cross_avg",  // Se Alerts > [Rules] > [+ New Rule] i grensesnittet, og velg en regel for å se API-navnet.
				"disabled"	: 1,  // (valgfritt) Det gir sjelden mening å opprette en deaktivert regel, men alertRuleEdit kan bruke dette feltet.
				"var_n"		: 123.00,  // En "X"-variabel blir til "var_x",
				"var_c"		: "USD",  // ... så disse feltene avhenger av hva regelen trenger,
				"var_h"		: 24,  // ... og noen regler har ingen variabler.
				"direction"	: "both",  // Eller "drop" eller "rise" hvis regelen har en retning.
				"categories"	: ["The Category 1", "The Category 2"],  // (valgfritt) Tom eller utelatt betyr ALLE PRODUKTER.
				"ignoreOos"	: 1,  // (valgfritt) Ignorer konkurrenter som ikke har varen på lager (se grensesnittet).
				"urlInclude"	: "",  // (valgfritt, skiller ikke mellom store/små bokstaver).
				"urlExclude"	: "amazon",  // (valgfritt, skiller ikke mellom store/små bokstaver).
				// "ruleNumber" identifiserer hver regel (f.eks. for senere redigering eller sletting).
				// Du ser det i regelobjektene når du henter dem, men du kan ikke angi det selv.
			}
			...
		],
		"rulesRemove"	: [1,4,7],  // (valgfritt) "ruleNumber" for reglene som skal fjernes.
					// Du får dette "ruleNumber" fra alertGetAll nedenfor.
					// MERK: Bruk "rules" = [] for å fjerne alle regler.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientEdit",
			"ok"	: 3,  // Antall endringer (variabler + regler som er lagt til/slettet).
		},
		...
	]
}

alertRecipientDelete - Slett en varselmottaker

Dette er permanent. Alle varslingsreglene til mottakeren og historikken deres slettes umiddelbart uten mulighet for gjenoppretting.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientDelete",
		"email"		: "john@example.net",  // Gjeldende e-postadresse eller telefonnummer (nøyaktig samme format som returneres av alertGetAll).
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientDelete",
			"ok"	: 1,
		},
		...
	]
}

alertRuleEdit - Rediger en eksisterende varslingsregel for en mottaker

Her kan du redigere én eksisterende varslingsregel i stedet for å erstatte eller legge til regler. Du kan for eksempel endre variabelen N eller aktivere/deaktivere en regel.
Bruk i stedet arrayen "rulesRemove" i handlingen alertRecipientEdit for å fjerne en regel, og "rulesAdd" i samme handling for å legge til en regel.
{ "actions" : [
	...
	{
		"a"		: "alertRuleEdit",
		"email"		: "john@example.net",  // Mottakerens e-postadresse eller telefonnummer (samme format som returneres av alertGetAll).
		"ruleNumber"	: 1,  // Referansenummeret til regelen som skal redigeres, som returneres av alertGetAll nedenfor.
		"rule"		: {
			// Variabler i regelen som skal overskrives; se "rulesAdd" i alertRecipientEdit ovenfor for FORMATET PÅ REGELOBJEKTER.
			"disabled"	: 1,  // For eksempel for å aktivere/deaktivere en regel,
			"var_n"		: 5,  // eller en annen variabel, for eksempel N, avhengig av regeltypen.
			...
		},
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRuleEdit",
			"ok"	: 1,  // Antall endrede variabler.
		},
		...
	]
}

alertGetAll - Hent alle varselmottakere og reglene deres

{ "actions" : [
	...
	{
		"a"	: "alertGetAll",
		// Denne handlingen har ingen parametere.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "alertGetAll",
			"ok"		: 3,  // Antall mottakere (lengden på arrayen "recipients").
			"recipients"	: [ // Array med alle mottakere, der hver er et objekt som 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, der hver regel er et objekt som beskrevet i alertRecipientEdit ovenfor.
						...
						{
							"ruleNumber"	: 4,  // Referansenummer som brukes ved redigering av regelen med alertRuleEdit ovenfor.
							"name"		: "me_cross_avg",
							"disabled"	: 0,
							"var_n"		: "123.00",  // MERK: Alle variabler returneres som strenger, selv når de er tall.
							"var_c"		: "USD",
							"var_h"		: "24",
							"direction"	: "both",
							"categories"	: [],  // Tom betyr alle produkter.
							"ignoreOos"	: 0,
							"urlInclude"	: "",
							"urlExclude"	: "amazon",
						}
						...
					],
				}
				...
			],
		},
		...
	]
}

Regler for automatisk prisjustering

repricingCreate - Opprett en ny prisjusteringsregel

Det er samme funksjon som grensesnittet bruker når du går til Repricing og klikker på New Repricing Rule.
Klikk på de grønne spørsmålstegnene i kontoen din for å få detaljer om hvert felt.
Men hvordan knytter du produkter til regelen? Ved å redigere selve produktene med handlingen productEdit eller productRepricing. En regel "eier" ikke produkter; det er produktene som peker til en bestemt regel.
{ "actions" : [
	...
	{
		"a"	: "repricingCreate",
		"name"	: "The Rule Name",  // Høyst 50 tegn.
		"init"	: { // Objekt for startverdien som brukes som fallback (første rad med teksten "Set my price to").
			"target"	: "cheapest_n",  // (se listen nedenfor)
			"var_n"		: 3,  // Bare hvis målet krever en N-variabel.
			"plusAmount"	: -2,  // Positiv for over, negativ for under.
			"plusCurrency"	: "%",  // Valuta (f.eks. "USD") eller "%".
			// Dette tilsvarer "Sett prisen min 2 % under gjennomsnittet av de 3 billigste konkurrentene".
			// ADVARSEL: I motsetning til "never"-objektene nedenfor har startverdien ingen "direction". Det er fortegnet på "plusAmount" som avgjør over/under.
		},
		"never"	: [ // (valgfritt) "but never"-objekter som utføres i rekkefølge (høyst 0-10).
			{
				"target"	: "cheapest_n_in",  // (se listen nedenfor)
				"var_n"		: 1,  // Bare hvis målet krever en N-variabel.
				"direction"	: "below",  // Eller "above".
				"plusAmount"	: -10,  // Positiv for pluss, negativ for minus (påkrevd også hvis 0).
				"plusCurrency"	: "USD",  // Valuta eller "%" (påkrevd også hvis plusAmount=0).
				// Dette tilsvarer "Men aldri under den billigste konkurrenten med varen på lager minus 10,00 USD".
			},
			{
				"target"	: "cost",
				"direction"	: "below",
				"plusAmount"	: 5,
				"plusCurrency"	: "%",
				// Dette tilsvarer "Men aldri under kostprisen min pluss 5 %".
			}
		],
		"ignoreDomains"	: "amazon ebay.com MyLabel1",  // (valgfritt) Domener og/eller etiketter som skal ignoreres blant konkurrentene (skiller ikke mellom store/små bokstaver; se grensesnittet).
		"charm"		: "none|zeros|charm",  // (valgfritt, standard "none") Psykologisk prisavrunding ("", "none" og utelatt betyr det samme).
		"confidence"	: 82,  // (valgfritt, standard 70) Minste sikkerhetsprosent 0-99 (se grensesnittet).
		"disabled"	: 1,  // (valgfritt)
	},
	...
] }
// ========== Alle tilgjengelige "target"-strenger: ==========
// "average" : Gjennomsnitt av alle konkurrenter.
// "average_in" : Gjennomsnitt av alle konkurrenter med varen på lager.
// "cheapest_n" : Gjennomsnitt av de N billigste konkurrentene (eller "Den billigste" hvis N=1).
// "cheapest_n_in" : Gjennomsnitt av de N billigste konkurrentene med varen på lager (eller ...).
// "highest_n" : Gjennomsnitt av de N dyreste konkurrentene (eller ...).
// "highest_n_in" : Gjennomsnitt av de N dyreste konkurrentene med varen på lager (eller ...).
// "cost" : Min kostpris.
// "me_avg_n" : Min gjennomsnittspris de siste N timene (for å begrense hvor raskt prisen endres).
// "domain:example.com" : Prisen hos example.com (laveste pris hvis det finnes flere fra samme domene).
// "domainIn:example.com" : Prisen hos example.com, bare hvis varen er på lager (...).
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingCreate",
			"ok"	: 3,  // Antall objekter som er tolket og lagret korrekt (f.eks. init + never[0] + never[1] = 3).
			"name"	: "The Rule Name",  // Endelig navn i databasen (spesialtegn kan bli konvertert).
		},
		...
	]
}

repricingEdit - Rediger en eksisterende prisjusteringsregel

Endre en eksisterende prisjusteringsregel.
Se repricingCreate ovenfor for å forstå hvordan disse variablene fungerer.
Dette endrer selve regelen, ikke produktene som er knyttet til den. Hvis du vil knytte produkter til regler, må du bruke handlingen productEdit eller productRepricing.
{ "actions" : [
	...
	{
		"a"		: "repricingEdit",
		"name"		: "The Rule Name",  // Skiller ikke mellom store/små bokstaver.
		"newName"	: "The Rule Renamed",  // (valgfritt) Høyst 50 tegn.
		"init"		: { // (valgfritt) Hvis oppgitt, overskriv én eller flere variabler i startverdien (se repricingCreate).
			"plusAmount"	: 1,  // Du kan for eksempel endre bare "plusAmount", mens de andre variablene beholder verdiene sine.
			// ADVARSEL: Hvis den nye "target" krever en N-variabel, må du angi "var_n".
		},
		"never"		: [...], // (valgfritt) Du kan overskrive hele "never"-arrayen, men det er som regel bedre å bruke never_* nedenfor.
		// "never":[] sletter alle eksisterende betingelser. Utelat feltet for å beholde dem.
		"never_0"	: { // (valgfritt) Overskriv det første "but never"-objektet (arrayindeks 0).
			"var_n"		: 2,  // Du kan for eksempel endre bare "var_n", mens de andre variablene beholder verdiene sine.
		},
		"never_2"	: {
			"target"	: "",  // Dette deaktiverer den tredje "but never"-betingelsen (arrayindeks 2).
			// Du trenger ikke bry deg om objektets andre variabler hvis "target" settes til "".
			// "never_2":{} gjør det samme.
		},
		"never_6"	: {...}, // Dette kan være en ny "but never"-betingelse du legger til. Da kreves alle variabler som i repricingCreate.
		// "never_9" er maksimum siden "never"-arrayen kan inneholde opptil 10 elementer.
		"ignoreDomains"	: "",  // (valgfritt) Samme som repricingCreate.
		"charm"		: "zeros",  // (valgfritt) ...
		"confidence"	: 82,  // (valgfritt) ...
		"disabled"	: 1,  // (valgfritt) 0 for å aktivere en regel som er deaktivert.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingEdit",
			"ok"	: 3,  // Antall endringer (f.eks. én variabel i et never_N-objekt + én i "init"-objektet + "charm").
			"name"	: "The Rule Name",  // Endelig (nytt) navn i databasen (spesialtegn kan bli konvertert).
		},
		...
	]
}

repricingDelete - Slett en prisjusteringsregel

Dette er permanent. Regelen slettes umiddelbart og permanent fra kontoen din. Produkter som bruker regelen, vil deretter stå uten regel, slik at den automatiske prisjusteringen ikke lenger fungerer.
{ "actions" : [
	...
	{
		"a"		: "repricingDelete",
		"name"		: "The Rule Name",  // Skiller ikke mellom store/små bokstaver.
		"onlyIfUnused"	: 1,  // (valgfritt) For sikkerhets skyld kan du bruke dette til å få en feil hvis noen produkter bruker regelen.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"		: "repricingDelete",
			"ok"		: 1,
			"productsCount"	: 10,  // Antall produkter som brukte regelen (og nå står uten).
		},
		...
	]
}

repricingGetAll - Hent alle prisjusteringsregler

Se først repricingCreate ovenfor, siden svarformatet for denne handlingen ligner mye på det du oppgir til repricingCreate i forespørselen.
{ "actions" : [
	...
	{
		"a"	: "repricingGetAll",
		// Denne handlingen har ingen andre parametere.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingGetAll",
			"ok"	: 10,  // Totalt antall regler (lengden på "rules"-arrayen).
			"rules"	: [ // Array med prisjusteringsregler (alfabetisk rekkefølge), der hver regel er et objekt:
				...
				{
					"name"		: "Some Repricing Rule",
					"created"	: 1234567890,  // Epoch-tidspunkt da regelen ble opprettet.
					"createdBy"	: "SOMEUSER",  // Brukernavn eller "API".
					"edited"	: 1234567890,  // Tidspunkt for siste redigering (hvis relevant, ellers mangler variabelen).
					"editedBy"	: "SOMEUSER",  // Brukernavn eller "API" (eller utelatt).
					"disabled"	: 1234567890,  // Hvis regelen er deaktivert: Epoch-tidspunktet for siste deaktivering. Ellers utelatt.
					"disabledBy"	: "SOMEUSER",  // Brukernavn eller "API" (eller utelatt).
					"productsCount"	: 10,  // Antall produkter som bruker regelen nå.
					"ignoreDomains"	: "amazon ebay.com MyLabel1",  // Domener og/eller etiketter fra konkurrenter som ignoreres (se grensesnittet).
					"charm"		: "charm",  // Modus for psykologisk prisavrunding (none|zeros|charm).
					"confidence"	: 82,  // Minste sikkerhetsprosent 0-99 (se grensesnittet).
					"init"	: { // Objekt for startverdien som brukes som fallback (første rad med teksten "Set my price to").
						"target"	: "cheapest_n",  // (se listen under repricingCreate)
						"var_n"		: 3,  // Hvis målet krever en N-variabel, ellers utelatt.
						"plusAmount"	: -2,  // Positiv for over, negativ for under.
						"plusCurrency"	: "%",  // Valuta (f.eks. "USD") eller "%".
						// Dette tilsvarer "Sett prisen min 2 % under gjennomsnittet av de 3 billigste konkurrentene".
						// ADVARSEL: I motsetning til "never"-objektene nedenfor har startverdien ingen "direction". Det er fortegnet på "plusAmount" som avgjør over/under.
					},
					"never"	: [ // "but never"-objekter som utføres i rekkefølge.
						{
							"target"	: "cheapest_n_in",
							"var_n"		: 1,
							"direction"	: "below",  // Eller "above".
							"plusAmount"	: -10,  // Positiv for pluss, negativ for minus.
							"plusCurrency"	: "USD",  // Valuta eller "%".
							// Dette tilsvarer "Men aldri under den billigste konkurrenten med varen på lager minus 10,00 USD".
						},
						{},  // Det betyr at denne andre raden med "But never"-betingelser er tom.
						{
							"target"	: "cost",
							"direction"	: "below",
							"plusAmount"	: 5,
							"plusCurrency"	: "%",
							// Dette tilsvarer "Men aldri under kostprisen min pluss 5 %".
						}
					],
				}
				...
			],
		},
		...
	]
}

Regneark

spreadsheetDownload - Last ned et regneark

Denne handlingen er et UNNTAK: Den kan ikke kombineres med andre handlinger og returnerer en regnearkfil i stedet for et JSON-svarobjekt (med mindre du bruker "savePreset" eller "downloadURL" nedenfor)
Dette tilsvarer det du kan gjøre på siden Export i kontoen din.
Sørg for at timeout-innstillingene er høye nok, siden det kan ta serveren litt tid å generere et stort regneark.
GJØR DET ENKELT: Klikk på Show API equivalent på eksportsiden for å generere hele JSON-forespørselen (og curl-kommandoen) for valgene dine i skjemaet.
{ "actions" : [
	{
		"a"		: "spreadsheetDownload",
		"preset"	: "Some Preset Name",  // (valgfritt) I stedet for å angi alt nedenfor kan du bruke en av dine eller våre maler.
			// For dine egne maler må dette være hele navnet uten brukernavn foran eller valuta etter.
			// For standardmalene våre finner du navnene ved å åpne DIRECT DOWNLOAD-menyen på eksportsiden og holde musepekeren over dem.
			// "pricezag_backup" er for eksempel vår spesielle mal for sikkerhetskopi (se "Special BACKUP format to re-import" under DIRECT DOWNLOAD).
			// Du kan også angi andre variabler nedenfor som overstyrer malens vanlige innstillinger (for eksempel valuta, format eller kategorier).
		"savePreset"	: "My New Preset Name",  // (valgfritt) Lagre alt du oppgir nedenfor som en ny mal (som deretter kan brukes i både grensesnittet og API-et).
			// UNNTAK FRA UNNTAKET: Hvis du bruker savePreset, lastes ikke noe regneark ned; svaret blir i stedet et vanlig JSON-objekt.
		"savePresetOverwrite"	: 1,  // (valgfritt) Overskriv den eksisterende malen oppgitt i "savePreset" (ellers returneres en feil).
			// ADVARSEL: Overskriving betyr at ingenting fra den forrige malen beholdes. Ikke prøv å endre bare ett felt.
			// Bruk spreadsheetPresetEdit nedenfor for å gi nytt navn til eller slette en mal.
		"downloadURL"	: 1,  // (valgfritt) UNNTAK FRA UNNTAKET: I stedet for filen returneres et vanlig JSON-svar med "fileURL" i objektet,
			// som er en offentlig URL til filen (ingen autentisering eller API-nøkkel kreves). Filen kan lastes ned av alle i 15 minutter.
			// "ok" angir antall rader, og "fileSize" vises i byte.
		"format"	: "xlsx|xls|csv|csv-tab",  // (standard er csv for API-et)
		"currency"	: "USD",  // (PÅKREVD, med mindre en mal brukes) Valuta for ALLE beløp.
		"categories"	: ["Category 1", "Category 2"],  // Ta bare med produkter fra disse kategoriene (ellers alle produkter).
		"historyPeriod"	: "prev_6mo",  // (valgfritt, standard "now")
			// Klikk FØRST på spørsmålstegnene (?) på eksportsiden om historikkperioder; de forklarer innstillingene.
			// "historyPeriod" bestemmer hvor langt tilbake vi henter beløp, før dataene deles inn i flere rader per produkt etter "historyRow".
			// "now": Ingen historikk, bare gjeldende data (og derfor ingen "historyRow").
			// "all": Hele perioden vi har data for siden registrering (eller i det minste for de aktuelle produktene). KAN VÆRE TREGT.
			// "1234500000-1237800000": En egendefinert periode ("fra-til" i epoch-tid).
			// "123h": De siste 123 timene. Ingen avrunding til tidsgrenser; slutter nå og kan begynne midt i en klokketime.
			// "cur_123(d|wk|mo|yr)": De siste 123 dagene/ukene/månedene/årene inkludert den nåværende ufullstendige perioden. "cur_2mo" lastet ned den 10. dekker derfor 40 dager.
			// "prev_123(d|wk|mo|yr)": De foregående 123 avsluttede dagene/ukene/månedene/årene. "prev_2mo" lastet ned 10. februar dekker 62 dager (desember + januar).
			// Starttidspunktet for cur_* og prev_* (og sluttidspunktet for prev_*) avrundes alltid til foregående midnatt, mens cur_* slutter nå.
			// "cur_2d" lastet ned kl. 12 dekker derfor de siste 36 timene, mens "prev_2d" dekker 48 timer som sluttet for 12 timer siden.
		"historyRow"	: "2w",  // (påkrevd, men bare hvis "historyPeriod" ikke er "now")
			// "historyRow" bestemmer hvor lang periode hver rad representerer (gjennomsnitt for perioden), og gir dermed flere rader per produkt (unntatt "all").
			// Tenk på "historyRow" som OPPDELINGEN av "historyPeriod" i enkelte regnearkrader for hvert produkt.
			// "all": Gjennomsnitt over hele historyPeriod i én rad per produkt.
			// "123(d|wk|mo|qt|yr)": Del inn fra midnatt i intervaller på 123 kalenderdager/uker/måneder/kvartaler/år. 123 kan utelates hvis det er 1 ("wk" i stedet for "1wk").
			// Laster du ned på lørdag med historyRow:"7d", blir hver rad gjennomsnittet fra lørdag kl. 00:00 til fredag kl. 23:59.
			// Med historyRow:"1wk" blir hver rad i stedet gjennomsnittet for mandag 00:00 til søndag 23:59; siste rad er den ufullstendige uken man-lør.
			// ▶ GRENSE PÅ 500 000 RADER: Både grensesnittet og API-et avviser historikkinnstillinger som gir mer enn 500 000 rader.
			// Det kan lett skje med historyRow:"day" hvis historyPeriod dekker mange dager, f.eks. 365 dager x 1 400 produkter.
			// Hvis du virkelig trenger dette, last ned ett regneark per kategori med et par hundre produkter om gangen.
		"timezone"	: "America/Los_Angeles",  // (valgfritt, standard "UTC") Formatet er filstien til Linux-mappene i /usr/share/zoneinfo.
			// Mellomrom konverteres til understreker.
			// En tidssone er bare nyttig hvis history*-innstillingene bruker kalenderbaserte perioder (for å bestemme midnatt).
			// Grensesnittet bruker tidssonen til den gjeldende brukeren fra innstillingene. API-et har ikke en slik innstilling, så du må oppgi den i forespørselen.
		// ========== KOLONNER: ==========
		// Variablene column* bestemmer kolonnene i regnearket (se skjemaet på eksportsiden for forklaring av hver kolonne).
		// Alle er 0 som standard (kolonnen tas ikke med), bortsett fra Code.
		"columnCode"		: 1,  // (Denne kan ikke fjernes; det finnes alltid 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 opprettelsesdato YYYY/MM/DD (i systemet vårt).
		"columnCustom"		: 1,  // Produktenes egendefinerte felter (én kolonne per unik variabel på tvers av produktene).
		"columnPrice"		: 1,  // Produktpris i den ønskede valutaen (IKKE produktets egen valuta).
		"columnCost"		: 1,  // Produktets kostpris (i ...).
		"columnMargin"		: 1,  // Produktets margin i prosent basert på pris og kostpris.
		"columnRank"		: 1,  // Min prisplassering.
		"columnInRank"		: 1,  // Min prisplassering blant varer på lager.
		"columnMyWebsite"	: 1,  // URL til mitt eget nettsted.
		"columnReprice"		: 1,  // Beregnet prisjusteringsbeløp (i ...).
		"columnRepricingRule"	: 1,  // Navn på prisjusteringsregel.
		"columnRecommended"	: 1,  // Anbefalt pris (se hjelpen på eksportsiden).
		"columnCompUrls"	: 1,  // Konkurrent-URL-er (én per kolonne).
		"columnCompUrlsJoin"	: 1,  // Konkurrent-URL-er (atskilt med mellomrom i én celle).
		"columnCompMinMaxAvg"	: 1,  // Legger til 3 kolonner: konkurrentenes minimum/maksimum/gjennomsnitt.
		"columnInCompMinMaxAvg"	: 1,  // Legger til 3 kolonner: minimum/maksimum/gjennomsnitt for konkurrenter MED VAREN PÅ LAGER.
		"columnCompPrice"	: 1,  // Legger til én kolonne per konkurrent med prisen (i ...).
		"columnCompStock"	: 1,  // Legger til én kolonne per konkurrent med lagerstatus (123|IN|OUT).
		"columnCompSales"	: 1,  // Legger til én kolonne per konkurrent med salg per uke.
		"columnCompRank"	: 1,  // Legger til én kolonne per konkurrent med plasseringen blant alle (inkludert deg).
		"columnCompInRank"	: 1,  // Legger til én kolonne per konkurrent med plasseringen blant konkurrenter med varen på lager (inkludert deg).
		// ========== SKJULTE AVANSERTE PARAMETERE: ==========
		// Det finnes også noen udokumenterte alternativer som blant annet brukes av malen vår "pricezag_backup".
		"originalCurrencies"	: 1,  // I stedet for å konvertere beløp til angitt valuta og få numeriske celler, vises verdiene som tekst med opprinnelig valuta ("123.90 USD").
		"keepUrlLabels"		: 1,  // Normalt fjerner vi etikettene fra konkurrent-URL-er. Denne innstillingen beholder dem (nyttig for sikkerhetskopier).
		"csvSeparator"		: ";",  // Hvis CSV-formatet skal bruke et annet skilletegn enn komma eller tabulator.
		"csvNoQuote"		: 1,  // Forhindre at CSV noen gang bruker anførselstegn ("). Dette kan gjøre formatet ugyldig.
	}
] }
// En enkel måte å laste ned en CSV-sikkerhetskopi 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 - Gi nytt navn til eller slett en regnearkmal

Dette tilsvarer det du kan gjøre i kontoen ved å gå til siden Export og klikke på Edit Presets.
Her kan du bare GI NYTT NAVN TIL eller SLETTE en mal. Bruk handlingen spreadsheetDownload ovenfor hvis du vil opprette en ny mal eller endre en eksisterende.
{ "actions" : [
	{
		"a"		: "spreadsheetPresetEdit",
		"preset"	: "Some Preset Name",  // Malens nåværende navn.
		"newName"	: "The Renamed Preset",  // For å gi denne malen nytt navn.
		"delete"	: 1,  // Dette sletter malen "preset" fra kontoen din.
		// MERK: Du kan ikke slette en mal som brukes til automatisk eksport (gir feil).
		// Du må først slette de planlagte automatiske eksportene (se eksportsiden).
	}
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetPresetEdit",
			"ok"	: 1,
		},
		...
	]
}

spreadsheetAutoCreate - Opprett en ny automatisk regnearkeksport

Dette tilsvarer det du kan gjøre i kontoen ved å 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",  // (valgfritt) Standard er "preset", som bruker valutaen til malen.
		"attach"		: "link",  // (valgfritt, standard "attach") "attach" for vedlagt fil eller "link" for direkte lenke til en lagret fil.
		"everyMonday"		: 1,  // Send regnearket hver mandag.
		"everyTuesday"		: 1,  // ... (og tilsvarende for hver ukedag frem til "everySunday").
		"everyMonthDay1"	: 15,  // Send den 15. hver måned.
		"everyMonthDay2"	: 21,  // ... og også den 21.
		"everyMonthDay3"	: "last",  // ... og også den siste dagen i hver måned.
			// everyMonthDay* kan være fra 0 til 9, altså maksimalt 10 dager per måned.
		"time"			: "3:59pm",  // "15.59" fungerer også og konverteres til "3:59pm". "0:9", "0.09", "00:09" og "0:09am" fungerer likt.
		"timezone"		: "America/Los_Angeles",  // (valgfritt, standard "UTC") Formatet er filstien til Linux-mappene i /usr/share/zoneinfo.
			// Mellomrom i bynavn konverteres til understreker.
	}
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetAutoCreate",
			"ok"	: 1,
			"id"	: "5gwi6fqa",  // Referansenummer for denne automatiske eksporten for senere redigering (se spreadsheetAutoEdit nedenfor).
		},
		...
	]
}

spreadsheetAutoEdit - Rediger en automatisk regnearkeksport

Dette tilsvarer det du kan gjøre i kontoen ved å gå til siden Export og klikke på en Edit-knapp i listen under AUTO-EXPORT TO EMAIL.
{ "actions" : [
	{
		"a"			: "spreadsheetAutoEdit",
		"id"			: "5gwi6fqa",  // Referansenummer for den automatiske eksporten som skal redigeres.
			// Du får ID-en i svaret fra spreadsheetAutoCreate, men kan også se den i tittelen på popup-vinduet når du klikker på Edit for en automatisk eksport.
		"disabled"		: 1,  // (valgfritt) 0 for å aktivere en deaktivert automatisk eksport.
		"delete"		: 1,  // (valgfritt) Slett denne automatiske eksporten helt.
		// ===== Følgende felter (alle valgfrie) er de samme som i spreadsheetAutoCreate ovenfor =====
		"preset"		: "The Preset Name",
		"email"			: "john@example.net",
		"currency"		: "USD",
		"attach"		: "link",
		"everyMonday"		: 1,  // ADVARSEL: Hvis du oppgir minst én every*-variabel, slettes ALLE eksisterende every*-variabler.
		"everyMonthDay1"	: 15,  // Hvis "everyFriday"=1 før endringen, vil angivelse av "everyMonthDay3" altså fjerne denne "everyFriday".
		// ... og så videre (se spreadsheetAutoCreate for alle every*-variabler).
		"time"			: "3:59pm",
		"timezone"		: "America/Los_Angeles",
	}
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetAutoEdit",
			"ok"	: 3,  // Antall utførte endringer.
		},
		...
	]
}

Konkurrenter og mer

competitorDeleteAll - Fjern en konkurrent fra alle produkter eller kategorier

Dette massesletter URL-ene til en konkurrent fra enten alle produkter eller produkter i bestemte kategorier.
ADVARSEL: Konkurrent-URL-ene slettes umiddelbart og permanent fra kontoen og kan ikke gjenopprettes.
Dette er samme funksjon som brukergrensesnittet bruker når du åpner siden til en konkurrent og klikker på Delete from all Products eller åpner en kategoriside og klikker på (X)-ikonet i listen over konkurrenter.
{ "actions" : [
	...
	{
		"a"		: "competitorDeleteAll",
		"domain"	: "competitordomain.com",
		"categories"	: ["The Category 1", "The Category 2"],  // (valgfritt) Hvis utelatt, må du bruke "allProducts" = 1.
		"allProducts"	: 1,  // (valgfritt) Fjern fra alle produkter ("categories" må IKKE oppgis).
		// Bruk enten "categories" eller "allProducts", ikke begge og ikke ingen.
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "competitorDeleteAll",
			"ok"	: 10,  // Antall slettede URL-er.
		},
		...
	]
}

mathEdit - Angi/rediger prisberegninger for et konkurrentdomene

Det er samme funksjon som grensesnittet bruker når du går til Domains, klikker på et konkurrentdomene i listen og deretter på Mathematically alter the price. Alt du kan fylle ut i skjemaet, kan også angis via API-et med denne handlingen. mathEdit.
Klikk på de grønne spørsmålstegnene i kontoen din for å få detaljer om hvert felt.
{ "actions" : [
	...
	{
		"a"		: "mathEdit",
		"domain"	: "competitordomain.com",
		"clear"		: 1,  // (valgfritt) Deaktiver alle beregninger for domenet (sletter alle tidligere innstillinger).
		// Hvis clear:1 er oppgitt, må du ikke angi noe annet nedenfor, siden det gir en feil.
		"math"	: [  // Array med beregningsblokker som skal brukes.
			{  // Dette er et objekt for en beregningsblokk, og alle felter er valgfrie.
				"categories"		: ["Category 1", "Category 2"],  // Bare for produkter fra disse kategoriene.
				"theirPriceMin"		: 1234.90,  // Bare når prisen er større enn eller lik N.
				"theirPriceMinCurrency"	: "USD",  // Valuta ("original" betyr samme valuta som på nettstedet).
				"theirPriceMax"		: 1234.90,  // ... mindre enn eller lik N.
				"theirPriceMaxCurrency"	: "USD",  // Valuta (...).
				"themMeMin"		: -20.00,  // Bare når [dem-meg] er større enn eller lik N (se grensesnittet).
				"themMeMinCurrency"	: "USD",  // Valuta eller "%" av din egen pris (IKKE "original" her).
				"themMeMax"		: -1.5,  // ... mindre enn eller lik N.
				"themMeMaxCurrency"	: "%",  // Valuta (...).
				"addPre"		: -10.00,  // Beløp som legges til før multiplikasjon (eller trekkes fra hvis negativt).
				"addPreCurrency"	: "USD",  // Valuta ("original" betyr samme valuta som på nettstedet).
				"multiply"		: 1.1,  // Multipliser med denne faktoren.
				"divide"		: 1.1,  // ELLER divider (ikke angi begge).
				"addPost"		: 5.00,  // Beløp som legges til etter multiplikasjon (eller trekkes fra hvis negativt).
				"addPostCurrency"	: "USD",  // Valuta (...).
				// Virker det overveldende? Se det enkle eksempelet etter svaret.
			},
			... // Maksimalt 10 blokker totalt (beregningene utføres i rekkefølge).
		],
		// MERK: Vi støtter ikke endring av bare én variabel eller beregningsblokk. Oppgir du "math"-arrayen, erstattes alle eksisterende innstillinger.
		// MERK: En beregningsblokk uten multiplikasjon/divisjon (mangler eller er 1) og uten addPre!=0 eller addPost!=0 ignoreres,
		// og hvis alle blokker ignoreres, tilsvarer det å slette alle beregninger med clear:1.
		// Beregningene må altså faktisk endre noe for å bli lagret.
		// TIPS: Hvis du vil deaktivere beregningene for et domene midlertidig uten å slette dem,
		// kan du angi categories: ["Some Empty Existing Category"].
	},
	...
] }
SVAR:
{
	...
	"actions" : [
		...
		{
			"a"	: "mathEdit",
			"ok"	: 3,  // Antall endrede beregningsblokker (fjerning/nullstilling teller som en endring).
		},
		...
	]
}
ENKELT EKSEMPEL - Fjern 10 % avgift fra alle priser på amazon.co.uk:
{ "actions" : [
	{
		"a"		: "mathEdit",
		"domain"	: "amazon.co.uk",
		"math"		: [
			{
				"divide"	: 1.1
			}
		]
	}
] }

Flere eksempler

Disse forespørslene er POST data sendt til https://pricezag.com/api/v3/MYAPIKEY
▶ EKSEMPEL 1 - Oppdater kostprisen til et produkt
FORESPØRSEL:
{
	"actions" : [
		{
			"a"		: "productEdit",
			"code"		: "SKU-1234",
			"cost"		: 140.50,
			"costCurrency"	: "EUR"
		}
	]
}
SVAR:
{
	"ok"		: 1,  // Returnerer 0 hvis SKU-1234 allerede hadde den kostprisen.
	"errors"	: 0,  // Returnerer 1 hvis SKU-1234 ikke fantes.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "productEdit",
			"ok"	: 1  // Returnerer 0 hvis SKU-1234 allerede hadde den kostprisen, og -1 hvis produktet ikke fantes.
		}
	]
}

▶ EKSEMPEL 2 - Hent et produkt som ikke finnes
FORESPØRSEL:
{
	"actions" : [
		{
			"a"		: "productGet",
			"code"		: "NON-EXISTING-SKU",
			"currency"	: "USD"
		}
}
SVAR:
{
	"ok"		: 0,  // fordi ingen handling returnerte ok>0.
	"errors"	: 1,  // fordi én handling returnerte ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "productGet",
			"ok"	: -1,  // Slik ser du at handlingen mislyktes.
			"error"	: "Sorry, the product #NON-EXISTING-SKU does not exist. Maybe someone else just removed or renamed it?"
		}
	]
}

▶ EKSEMPEL 3 - Opprett en kategori, en prisjusteringsregel og deretter to produkter knyttet til dem
FORESPØRSEL:
{
	"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 tilsvarer "Sett prisen min midt mellom de 2 billigste konkurrentene".
			},
			"never"	: [
				{
					"target"	: "cost",
					"direction"	: "below",
					"plusAmount"	: 5,
					"plusCurrency"	: "%"
					// Dette tilsvarer "Men aldri under kostprisen min + 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 nettopp opprettet.
			"categories"	: ["My New Category"],	// Samme kategorinavn som vi nettopp opprettet.
			// ... selv om productCreate uansett oppretter manglende kategorier, så categoryCreate var ikke nødvendig.
			"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 handlingene returnerte ok>0.
	"errors"	: 0,  // fordi ingen handling returnerte ok<0.
	"actionsCount"	: 4,
	"actions" : [
		{
			"a"	: "categoryCreate",
			"ok"	: 1
		},
		{
			"a"	: "repricingCreate",
			"ok"	: 1
		},
		{
			"a"	: "productCreate",
			"ok"	: 1
		},
		{
			"a"	: "productCreate",
			"ok"	: 1
		}
	]
}

▶ EKSEMPEL 4 - Slå sammen to kategorier til en annen og slett de to opprinnelige kategoriene
FORESPØRSEL:
{
	"actions" : [
		{
			"a"			: "categoryCopy",
			"categoriesFrom"	: ["Original Category 1", "Original Category 2"],
			"deleteMode"		: "cat",
			// Merk at "removeMode":"cat" ikke er nødvendig siden deleteMode uansett sletter de to kategoriene.
			"categoriesTo"		: ["A New Category"]
		}
}
SVAR:
{
	"ok"		: 1,  // fordi én handling returnerte ok>0.
	"errors"	: 0,  // fordi ingen handling returnerte ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"			: "categoryCopy",
			"ok"			: 3,  // fordi 3 kategorier ble endret: de to opprinnelige ble slettet og én målkategori ble opprettet.
			"categoriesCreated"	: 1,
			"categoriesDeleted"	: 2,
			"categoriesModified"	: 0,
			"productsCount"		: 123
		}
	]
}

▶ EKSEMPEL 5 - Endre N-variabelen og retningen til en varslingsregel
FORESPØRSEL:
{
	"actions" : [
		{
			"a"		: "alertRuleEdit",
			"email"		: "john@example.net",
			"ruleNumber"	: 3,
			"rule"		: {
				"var_n"		: 1.5,
				"direction"	: "drop"
			}
		}
}
SVAR:
{
	"ok"		: 1,  // fordi én handling returnerte ok>0.
	"errors"	: 0,  // fordi ingen handling returnerte ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "alertRuleEdit",
			"ok"	: 2  // fordi 2 variabler ble endret korrekt.
		}
	]
}