ממשק ה-API של PriceZag — חיבור נתוני תמחור למערכות שלכם

השתמשו ב-JSON API של PriceZag לקבלת מחירים ומלאי של מתחרים, לניהול מוצרים וכללי תמחור מחדש, להורדת דוחות ולאוטומציה של תהליכי העבודה שלכם.

דוגמה מהירה עם curl

אנחנו יודעים שמפתחים מעדיפים לראות קודם קוד שעובד. הפקודות האלה יוצרות מוצר לבדיקה ואז שולפות אותו. החליפו את MYAPIKEY במפתח החשבון שלכם (ראו מפתח API).
יצירת מוצר לבדיקה:
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"}]}'
(הרצה שנייה של הפקודה תחזיר שגיאה, כי המוצר כבר קיים)
כעת אפשר לשלוף את המוצר שנוצר:
curl -X POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"productGet","code":"000-SOME-TEST-PRODUCT"}]}' | python -mjson.tool
(הסירו את | python -mjson.tool אם הכלי הזה לפענוח תגובת JSON אינו מותקן במסוף שלכם)

סקירה כללית

מה אפשר לעשות באמצעות ה-API של PriceZag

JSON API של PriceZag מאפשר לסקריפטים ולמערכות העסקיות שלכם לעבוד ישירות עם מחירי המתחרים ונתוני המלאי שאנחנו מנטרים. אפשר לשלוף נתוני מוצרים, לנהל מוצרים וקטגוריות, לחשב סכומים לפי כללי תמחור מחדש, להגדיר התראות ולהוריד גיליונות נתונים מותאמים אישית. אפשר להשתמש ב-API עם כל פלטפורמת מסחר אלקטרוני או שפת תכנות שמסוגלת לשלוח בקשות HTTPS ולעבד JSON.

אפשר גם לבקש מעוזר ה-AI המועדף עליכם לכתוב עבורכם את הסקריפטים. מסרו לו את כתובת התיעוד הזה (https://pricezag.com/integrations/api), הסבירו מה תרצו לבצע באופן אוטומטי וציינו את שפת התכנות או פלטפורמת המסחר שלכם. שמרו על סודיות מפתח ה-API ואל תדביקו אותו בשיחת AI.

PriceZag מבצעת את הניטור בפלטפורמה שלה, ולכן השימוש ב-API הוא אופציונלי. הוא שימושי כאשר רוצים לחבר את המערכת שלכם לנתונים האלה. Shopify ו-WooCommerce מציעות גם אינטגרציות ישירות.

מפתח API והרשאות

בחשבון PriceZag שלכם, פתחו את Automation > API. לחצו על Reveal the current API key כדי לראות את המפתח הנוכחי, או על Change the API key כדי להחליף אותו. שתי הפעולות דורשות את סיסמת החשבון. למשתמש צריכות להיות הרשאות מתאימות לצפייה במפתחות API או להפקתם. ללא הרשאות אלה, יש לפנות למנהל החשבון.

שמרו על סודיות מפתח ה-API. המפתח עשוי לאפשר שינויים נרחבים בנתוני החשבון, כולל מחיקה. אל תכניסו אותו למאגרי קוד ציבוריים, לקוד שרץ בדפדפן או לשיחות AI. אם מישהו מסייע לכם לבנות אינטגרציה, צרו עבורו משתמש PriceZag עם ההרשאות הדרושות והחליפו את המפתח לפי הצורך.

הגישה ל-API תלויה במנוי שלכם. עם גישה מלאה אפשר לעבוד עם כל המוצרים. בלעדיה, ניתן לגשת רק לעשרת המוצרים הראשונים במיון אלפאנומרי לפי קוד הסימוכין. לדוגמה, אם יש לכם 1,000 מוצרים עם קודים מ-SKU0001 עד SKU1000, ה-API יכול לגשת לקודים SKU0001 עד SKU0010. תקופת הניסיון החינמית בת 14 הימים כוללת גישה מלאה ל-API. אפשר גם להפעיל גישה מלאה כאפשרות נוספת במנוי.

יומן פעילות API והבקשה האחרונה

העמוד Automation > API בחשבון מציג את מועד בקשת ה-API האחרונה ואת הלחצן API Activity Log. אם סקריפט לא פועל, בדקו כאן אם הבקשות הגיעו ל-PriceZag ונסו לאתר שגיאות או שינויים בלתי צפויים.

שינויים שבוצעו באמצעות ה-API מופיעים גם ב-History of Edits במקומות שונים בחשבון, תחת שם המשתמש API. למשל, היסטוריית מוצר עשויה להציג Price edited by API במקום Price edited by JOHN. PriceZag תומכת בכמה משתמשים באותו חשבון, כך שאפשר להבחין בין שינויים אוטומטיים לפעולות ידניות של חברי צוות.

כתובת URL ושיטות בקשה

כל בקשות ה-API משתמשות באותה כתובת HTTPS. שלחו בקשות POST לכתובת הזאת, תוך החלפת MYAPIKEY במפתח שלכם:

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

הפעולות שתרצו לבצע ב-API ("actions") והפרמטרים שלהן צריכים להופיע בגוף בקשת JSON, ולא בכתובת ה-URL.
שלחו בגוף בקשת POST אובייקט JSON המכיל פעולה אחת או יותר. כתובת ה-URL אינה משתנה, בין אם קוראים מוצר, מעדכנים מחירים או מורידים גיליון נתונים.

לא יכולים לשלוח POST?
כמוצא אחרון, אפשר לשלוח בקשת GET עם גוף JSON מקודד ב-base64 בפרמטר ?data= של ה-URL. מאחר שאורך כתובות URL מוגבל, מומלץ מאוד להשתמש ב-POST.

איך פועלות פעולות API

מה שאנחנו מכנים פעולה היא פעולה שמתבצעת בחשבון שלכם, כגון עריכת שדות מוצר, שינוי כלל תמחור מחדש או קריאת מחירי כל המתחרים של מוצר.
ה-API וממשק המשתמש (UI) מפעילים אותן פונקציות בצד השרת, לכן כמעט כל פעולה שאפשר לבצע בממשק זמינה גם דרך ה-API.
כששולחים בקשת API, נתוני ה-JSON מכילים מערך של כל הפעולות שברצונכם לבצע, החל מפעולה אחת ועד 1,000 פעולות לכל היותר בבקשה. לדוגמה, אפשר לשנות שמות של שלושה מוצרים וליצור קטגוריה חדשה בבקשה אחת בת ארבע פעולות. אפשר גם לשלוף 1,000 מוצרים בבת אחת באמצעות 1,000 פעולות "productGet".
הפעולות מתבצעות לפי סדרן במערך. אם יוצרים קודם כלל תמחור מחדש ואז מקצים אליו מוצרים, יש לשמור על הסדר הזה כדי שהכלל כבר יהיה קיים כשמעדכנים את המוצרים.
בהמשך העמוד מופיעה רשימת כל הפעולות הזמינות.

אובייקט בקשת JSON

לסקריפטים ולקוד שנוצר באמצעות AI: דוגמאות התיעוד שלהלן כוללות // הערות ו-... מצייני מקום שמסבירים שדות. אלה דוגמאות להמחשה, לא JSON תקין שניתן לשלוח ללא שינוי. הסירו את ההערות והחליפו את מצייני המקום לפני השליחה. שתי דוגמאות ה-curl שלמעלה מכילות גוף JSON תקין.

כל נתוני ה-POST צריכים להיות אובייקט JSON יחיד {...} המכיל את מערך הפעולות לביצוע.
{
	"stopOnFailure"	: 1,  // (אופציונלי) כברירת מחדל המערכת ממשיכה לפעולה הבאה גם לאחר כישלון. הגדרה ל-1 עוצרת את ההמשך.

	// מערך כל הפעולות:
	"actions" : [
		// פעולה 1:
		{
			"a"	: "someActionName",  // שם הפעולה תמיד נמצא בשדה "a" של אובייקט הפעולה.
			"xx"	: "some parameter this action needs"	// כל שאר השדות הם הפרמטרים הדרושים לפעולה.
		},
		// פעולה 2:
		{
			"a"	: "anotherActionName",
			"abc"	: "some parameter this action needs",
			"xyz"	: {"x":"some object this action needs", "y":5, "z":6}
		},
		// פעולה 3:
		{
			"a"	: "aThirdAction",
			"xyz"	: ["some array this action needs", "..."]
		}
	]
}

תגובת השרת וקודי HTTP

עבור שגיאות במבנה הבקשה, או למשל כשהחשבון מושבת, השרת מחזיר text/plain המכיל את הודעת השגיאה.
אם הבקשה תקינה, בדרך כלל תתקבל תגובת JSON כאובייקט, פרט לפעולות בודדות המסומנות כחריגות (למשל הורדת גיליון נתונים). ניתן לזהות זאת בכותרת התגובה Content-Type: application/json של השרת.
קוד תגובת HTTP הוא:
◄ 200 כאשר כל הפעולות הצליחו (גם התוצאה הניטרלית ok=0 נחשבת להצלחה)
◄ 406 כאשר חלק מהפעולות הצליחו ואחרות נכשלו.
◄ 422 כאשר כל הפעולות נכשלו, אך לא מהסיבות שלהלן.
◄ 400 כאשר לא ניתן לפענח את אובייקט ה-JSON שהתקבל.
◄ 403 כאשר האימות נכשל (בדרך כלל בגלל מפתח API שגוי).
אפשר להסתמך על קודי התגובה האלה בסקריפטים שלכם. אם נחוץ פירוט נוסף, אובייקט ה-JSON המוחזר מכיל מידע מפורט יותר:
{
	"ok"		: 15,  // מספר הפעולות שבוצעו בהצלחה (ok>0 בכל פעולה)
	"errors"	: 0,  // מספר הפעולות שהחזירו שגיאה (ok<0)
	"actionsCount"	: 20,  // מספר הפעולות שהתבקשו מלכתחילה (אורך מערך "actions")
	// מכאן אפשר להסיק ש-5 פעולות החזירו ok=0: הן לא נכשלו, אבל לא שינו דבר.
	
	// מערך הפעולות המקוריות, באותו סדר:
	"actions" : [
		...
		// אובייקט התגובה לכל פעולה:
		{
			"a"	: "someActionName",
			"ok"	: 4,		// תוצאה: ‎>0 הצלחה, 0 ללא שינוי, ‎<0 שגיאה
						// למשל, 0 מתקבל כשמגדירים מחיר לזה שכבר קיים.
						// התוצאה -1 מתקבלת אם המוצר אינו קיים.
						// המשמעות של תוצאה חיובית תלויה בפעולה, לרוב מספר השדות או הפריטים שהשתנו.
			"error"	: "...",  // הודעת שגיאה אם ok<0
						// הודעות השגיאה שלנו מפורטות מאוד. מומלץ לשמור אותן ביומן
						// כדי לקבל את המידע הדרוש לזיהוי הבעיה.
			...	// נתונים נוספים שמחזירה הפעולה לפי סוגה.
		},
		...
	]
}

דוגמאות?

לפעמים דוגמאות מבהירות את הדברים. ראו דוגמאות נוספות בתחתית העמוד.

הגבלות קצב ותזמון

חומת אש מגינה עלינו (וגם עליכם) מפני התקפות ועומס בקשות. כאשר היא חוסמת מארח, האתר עלול להיראות כאילו הוא מושבת: ללא חיבור, תגובה או מענה ל-ping.
כדי למנוע חסימה של בקשות תקינות:
◄ אל תשתמשו במפתח API שגוי. חומת האש מאפשרת מעט מאוד ניסיונות עם מפתחות שגויים (בדומה לסיסמאות אתר שגויות).
◄ קבצו פעולות רבות לבקשה אחת באובייקט JSON יחיד (עד 1,000). ליצירת 1,000 מוצרים שלחו בקשה אחת ולא 1,000 בקשות.
◄ אם חייבים לשלוח בקשות רבות, המתינו 500 אלפיות השנייה בין בקשות והשתמשו שוב באותו חיבור HTTPS. פתיחת חיבור חדש לכל בקשה היא טעות נפוצה. כמות גדולה של בקשות מוצדקת בדרך כלל רק בעדכון מאות אלפי מוצרים, עם 1,000 פעולות בכל בקשה.
אין הגבלת קצב בקשות קבועה. חומת האש מחליטה לפי עשרות פרמטרים. הפעילו שיקול דעת לגבי הקצב.
 
בקשות מתוזמנות:
אם הבקשות מתבצעות במרווחי זמן קבועים, הוסיפו השהיה אקראית כדי שלא יישלחו בדיוק בתחילת הדקה (שנייה 0). לקוחות רבים שולחים באותו רגע. פיזור הבקשות עשוי לשפר את מהירות התגובה ולהפחית פסקי זמן בעת עומס.

כל פעולות ה-API הזמינות

להלן פירוט הפרמטרים ודוגמאות הבקשות והתגובות לכל פעולה. הקישורים בתפריט השמאלי מובילים ישירות לפעולות.

מוצרים

פעולהמטרה
productCreateיצירת מוצר חדש
productEditעריכת מוצר קיים
productCompetitorsעריכת כתובות URL של מתחרים עבור מוצר (ללא החלפת כולן)
productCategoriesעריכת קטגוריות של מוצר אחד או כמה מוצרים (ללא החלפת כולן)
productRepricingשיוך מוצרים רבים לכלל תמחור מחדש
productDeleteמחיקת מוצר אחד או כמה מוצרים
productGetשליפת מוצר (כולל נתוני המתחרים שלו)
productGetAllשליפת כל המוצרים (כולל נתוני המתחרים שלהם)

קטגוריות

פעולהמטרה
categoryCreateיצירת קטגוריה חדשה
categoryEditעריכת קטגוריה קיימת
categoryDeleteמחיקת קטגוריה אחת או כמה קטגוריות
categoryCopyהעתקה או העברה של מוצרים בין קטגוריות
categoryGetשליפת קטגוריה
categoryGetAllשליפת כל הקטגוריות

התראות

פעולהמטרה
alertRecipientCreateיצירת נמען התראות חדש
alertRecipientEditעריכת נמען ו/או כללי ההתראה שלו
alertRecipientDeleteמחיקת נמען התראות
alertRuleEditעריכת כלל התראה קיים של נמען
alertRuleCreate ?פעולה זו אינה קיימת. השתמשו ב-alertRecipientEdit עם מערך "rulesAdd".
alertRuleDelete ?פעולה זו אינה קיימת. השתמשו ב-alertRecipientEdit עם מערך "rulesRemove".
alertGetAllשליפת כל נמעני ההתראות והכללים שלהם

כללי תמחור מחדש

פעולהמטרה
repricingCreateיצירת כלל תמחור מחדש
repricingEditעריכת כלל תמחור מחדש קיים
repricingDeleteמחיקת כלל תמחור מחדש
repricingGetAllשליפת כל כללי התמחור מחדש

גיליונות נתונים

פעולהמטרה
spreadsheetDownloadהורדת גיליון נתונים
spreadsheetPresetEditשינוי שם או מחיקה של תבנית גיליון
spreadsheetAutoCreateיצירת ייצוא אוטומטי של גיליון
spreadsheetAutoEditעריכת ייצוא אוטומטי של גיליון

מתחרים ועוד

פעולהמטרה
competitorDeleteAllמחיקת מתחרה מכל המוצרים או הקטגוריות
mathEditהגדרה או עריכה של חישובי המחיר לדומיין מתחרה

מוצרים

productCreate — יצירת מוצר חדש

זוהי אותה פונקציה שמשמשת את ממשק המשתמש בעמוד New Product .
{ "actions" : [
	...
	{
		"a"		: "productCreate",
		"code"		: "UNIQUE-REF-CODE",  // 1 עד 80 תווים ([a-z\d][a-z\d_-]{0,78}[a-z\d]); ללא הבחנה בין אותיות גדולות לקטנות (יומר לאותיות גדולות).
		"name"		: "The Product Name",  // 1 עד 200 תווים לכל היותר
		"price"		: 1234.90,  // שימו לב לנקודה ופסיק: בלי מפריד אלפים; מפריד עשרוני הוא נקודה.
		"currency"	: "USD",
		"cost"		: 1234.90,  // (אופציונלי)
		"costCurrency"	: "USD",  // חובה אם צוין cost
		"repricingRule"	: "The Rule Name",  // (אופציונלי) כלל התמחור המשויך (ריק = מושבת; כלל לא קיים = שגיאה)
		"myWebsite"	: "https://...",  // (אופציונלי) URL או shopify:productId:variantId או woocommerce:productId(:variationId)
		"competitors"	: ["https://...", "https://..."],  // (אופציונלי)
		"categories"	: ["The Category 1", "The Category 2"],  // (אופציונלי) קטגוריות המוצר (אם אינן קיימות הן ייווצרו)
		"comments"	: "Some comments\nAnd another line",  // (אופציונלי) עד 1,000 תווי UTF-8
		"custom_someFieldName1"	: "Value of custom field",		// (אופציונלי)
		"custom_someFieldName2"	: "Value of other\nCustom\tField",  // (אופציונלי)
		// שדות מותאמים מיועדים לשימוש פנימי, למשל כעמודות בייצוא גיליון נתונים.
		// עד 20 שדות מותאמים למוצר. שם השדה עד 40 אותיות, ספרות או קווים תחתונים (רגיש לגודל אותיות), ללא הקידומת "custom_"; 47 כולל הקידומת.
		// ערך השדה מוגבל ל-500 בתים, לא בהכרח תווים. אפשר לציין מספר כגון custom_varname:123.
		// אך ה-API תמיד מחזיר מחרוזת, כגון custom_varname:"123"; המירו לסוג אחר אם נחוץ.
		// כדי למחוק שדה מותאם, הגדירו אותו כ-"". המחיקה חלה על productEdit ולא על productCreate.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "productCreate",
			"ok"	: 1,
			"code"	: "REF-CODE",  // קוד המוצר הסופי במסד הנתונים (ייתכן שתווים מיוחדים הומרו).
		},
		...
	]
}

productEdit — עריכת מוצר קיים

זוהי אותה פונקציה שמופעלת כשעורכים שדה של מוצר בממשק. אלא שהממשק שולח שדה אחד בכל פעם, ואילו ה-API מאפשר לשנות למשל שם ומחיר בבקשה אחת.
{ "actions" : [
	...
	{
		"a"		: "productEdit",
		"code"		: "REF-CODE",
		...		// מקבל את אותם פרמטרים של productCreate, וכולם אופציונליים.
		"newCode"	: "REF-CODE-RENAMED",  // (אופציונלי)
		"competitors"	: ["https://...", "https://..."],  // אם סופק, מחליף את כל כתובות המתחרים הקיימות.
		// להוספה או להסרה בלי להחליף הכול, השתמשו במקום זאת בפעולה productCompetitors.
		"categories"	: ["The Category 1", "The Category 2"],  // אם סופק, מחליף את כל הקטגוריות הנוכחיות. לחלופין השתמשו ב-productCategories או categoryEdit.
		"custom_someFieldName"	: "New value or empty to delete that custom field",
		// מספר השדות המותאמים מוגבל ל-20 למוצר. לפני שמוסיפים עוד, ייתכן שצריך למחוק ישנים באמצעות "".
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "productEdit",
			"ok"	: 3,  // מספר השינויים שבוצעו (למשל מחיר שלי + שתי כתובות מתחרים = 3).
			"code"	: "REF-CODE",  // הקוד הסופי החדש במסד הנתונים (ייתכן שתווים מיוחדים הומרו).
		},
		...
	]
}

productCompetitors — עריכת כתובות URL של מתחרים עבור מוצר

ערכו את כתובות המתחרים בלי להחליף את כולן (בניגוד לפעולה productEdit ).
{ "actions" : [
	...
	{
		"a"			: "productCompetitors",
		"code"			: "REF-CODE",
		"competitorsAdd"	: ["https://...", "https://..."],  // (אופציונלי) הוספת כתובות המתחרים האלה לכתובות הקיימות.
		"competitorsRemove"	: ["https://...", "example.com/a0ff80...5f00", "example.net"],  // (אופציונלי) הסרת מתחרים. כל ערך יכול להיות:
		// כתובת URL (כולל תוספת hashtag). תוויות הן אופציונליות.
		// ערך "ref" של מתחרה (כפי שמחזירות פעולות אחרות: דומיין שורש ואחריו md5 בן 32 תווים).
		// דומיין שורש או שם מארח מלא; כל כתובות המוצר מהדומיין יוסרו.
		// גם "competitorsAdd" ו-"competitorsRemove" יכולים להיות מחרוזות במקום מערכים בני איבר אחד.
		// ההסרה מתבצעת לפני ההוספה, כך שאפשר להסיר דומיין שלם ואז להוסיף כתובת מאותו דומיין.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"			: "productCompetitors",
			"ok"			: 3,  // מספר כתובות המתחרים ששונו.
			"competitorsAdded"	: 2,  // מספר כתובות המתחרים שנוספו למוצר.
			"competitorsRemoved"	: 1,  // מספר כתובות המתחרים שהוסרו מהמוצר.
			// שגיאות:
			// הוספת כתובת שכבר קיימת אינה שגיאה (ok=0).
			// הסרת כתובת מלאה או "ref" שאינם קיימים גורמת לשגיאה (ok=-1).
			// הסרת כל כתובות דומיין שאינו קיים אינה שגיאה (ok=0).
		},
		...
	]
}

productCategories — עריכת קטגוריות של מוצר אחד או יותר

ערכו את קטגוריות המוצרים בלי להחליף את כולן (בניגוד ל-productEdit).
זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל All Products, בוחרים מוצרים ואז לוחצים על Selected Products › Edit Categories. כדאי לעיין שם בהסברים המפורטים.
כדאי לבדוק גם את הפעולה categoryEdit כדי לבחור את המתאימה לכם.
{ "actions" : [
	...
	{
		"a"			: "productCategories",
		"code"			: "REF-CODE",  // מחרוזת ללא הבחנה בין אותיות גדולות לקטנות, או:
		"code"			: ["REF-CODE-1", "REF-CODE-2"],  // אפשר גם להעביר מערך מוצרים (עד 100,000).
		"categoriesRemove"	: ["The Category 1", "The Category 2"],  // (אופציונלי) תחילה הסירו מהקטגוריות האלה.
		"categoriesRemoveAll"	: 1,  // (אופציונלי) תחילה הסירו מכל הקטגוריות, כמו productEdit.
		"deleteEmptyCategories"	: 1,  // כל קטגוריה שתתרוקן
		// לאחר הסרת המוצרים תימחק.
		"categoriesAdd"		: ["The Category 1", "The Category 2"],  // (אופציונלי) לאחר מכן הוסיפו לקטגוריות האלה (אם אינן קיימות ייווצרו).
		"categoriesAddClear"	: 1,  // (אופציונלי) רוקנו תחילה את קטגוריות היעד שאליהן מוסיפים מוצרים.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "productCategories",
			"ok"	: 3,  // מספר המוצרים שהשתנו.
		},
		...
	]
}

productRepricing — שיוך מוצרים רבים לכלל תמחור מחדש

שייכו עד 100,000 מוצרים לכלל תמחור מחדש אחד.
זה דומה לפעולה productEdit , אבל בגלל המגבלה של 1,000 פעולות לבקשה, שיוך 50,000 מוצרים עם הפעולה השנייה ידרוש 50 בקשות ויהיה אטי בהרבה.
אם רוצים לשנות רק מוצרים בודדים, עדיף לשקול את הפעולה productEdit במקום זאת.
{ "actions" : [
	...
	{
		"a"			: "productRepricing",
		"repricingRule"		: "The Rule Name",  // ללא הבחנה בין אותיות גדולות לקטנות; "" פירושו ללא כלל (השבתת התמחור מחדש).
		"products"		: ["REF-CODE-1", "REF-CODE-2"],  // ללא הבחנה בין אותיות גדולות לקטנות (עד 100,000).
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"		: "productRepricing",
			"ok"		: 10,  // מספר המוצרים שהשתנו.
			// אם כל המוצרים כבר משויכים לכלל הזה, התוצאה תהיה ok=0.
		},
		...
	]
}

productDelete — מחיקת מוצר אחד או כמה מוצרים

אזהרה: המוצר וכתובות המתחרים שלו נמחקים מיד ולצמיתות מהחשבון, ללא אפשרות שחזור.
זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל All Products, בוחרים מוצרים ואז לוחצים על Selected Products › Delete.
{ "actions" : [
	...
	{
		"a"	: "productDelete",
		"code"	: "REF-CODE",  // מחרוזת ללא הבחנה בין אותיות גדולות לקטנות, או:
		"code"	: ["REF-CODE-1", "REF-CODE-2"],  // אפשר גם מערך למחיקת כמה מוצרים (עד 100,000).
		"deleteEmptyCategories"	: 1,  // כל קטגוריה שתתרוקן
		// שהתרוקנה בעקבות מחיקת המוצרים תימחק גם היא.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "productDelete",
			"ok"	: 2,  // מספר המוצרים שנמחקו בהצלחה.
		},
		...
	]
}

productGet — שליפת מוצר

{ "actions" : [
	...
	{
		"a"			: "productGet",
		"code"			: "REF-CODE",  // ללא הבחנה בין אותיות גדולות לקטנות.
		"currency"		: "EUR",  // (אופציונלי) המרת כל הסכומים למטבע הזה במקום למטבע מחיר המוצר.
		"withStats"		: 1,  // (אופציונלי) החזרת אובייקט הסטטיסטיקות.
		"noCompetitors"		: 1,  // (אופציונלי) לא להחזיר מערך מתחרים כדי להקטין את הנתונים.
		"noComments"		: 1,  // (אופציונלי) לא להחזיר הערות (...)
		"withScreenshots"	: 1,  // (אופציונלי) החזרת כתובת תמונת צילום המסך העדכנית לכל מתחרה.
		"sickMax"		: 2,  // (אופציונלי, ברירת מחדל 1) ערך 0–3: החזרת כתובות רק עד רמת התקלה N.
	},
	...
] }
הפעולה מחזירה את כל הנתונים על המוצר, כולל המחירים והמלאי הנוכחיים של המתחרים.
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"			: "productGet",
			"ok"			: 1,
			"code"			: "REF-CODE",
			"name"			: "The Product Name",
			"price"			: 1234.90,  // המחיר שלכם, תמיד במטבע המקורי.
			"currency"		: "USD",  // המטבע המקורי של "price".
			"convCurrency"		: "EUR",  // המטבע של הסכומים המומרים ("currency" שסופק או מטבע מחיר המוצר).
			"priceConv"		: 1234.90,  // המחיר שלכם לאחר המרה באמצעות "convCurrency", או זהה ל-"price".
			"cost"			: 1234.90,
			"costCurrency"		: "USD",
			"costPriceConv"		: 1234.90,  // העלות שלכם מומרת למטבע המחיר "currency".
			"costConv"		: 1234.90,  // העלות שלכם מומרת ל-"convCurrency".
			"margin"		: 10.5,  // אחוז (יכול להיות שלילי).
			"repricingRule"		: "The Rule Name",  // שלושת משתני התמחור מחדש האלה אינם קיימים כשאין כלל תמחור.
			"reprice"		: 1234.90,  // הסכום הנוכחי שחושב לפי repricingRule.
			"repriceCurrency"	: "USD",  // זהה ל-"convCurrency"; מוצג כאן לשם הבהרה.
			"myWebsite"		: "https://...",
			"created"		: 1234567890,  // זמן Epoch של יצירת המוצר.
			"createdBy"		: "SOMEUSER",  // שם משתמש או "API".
			"edited"		: 1234567890,  // זמן Epoch של העריכה האחרונה, אם הייתה.
			"editedBy"		: "SOMEUSER",  // שם משתמש או "API".
			"comments"		: "Some comments\nAnd another line",
			"commentsLast"		: 1234567890,  // זמן Epoch של עריכת ההערות האחרונה, אם הייתה.
			"commentsLastBy"	: "SOMEUSER",  // שם משתמש או "API".
			"categories"		: ["The Category 1", "The Category 2"],
			"stats"		: {
				// רק מתחרים ברמות תקלה 0 או 1 נכללים בסטטיסטיקות, ללא קשר לערך "sickMax".
				// כל הסכומים מוצגים ב-"convCurrency": המטבע שב-"currency" או המטבע המקורי של המוצר.
				// אזהרה: כשאין סכום (למשל compIn* בלי מתחרים במלאי), הערך הוא 0.
				"rank"			: 1.23,  // הדירוג שלכם במחיר (1 = אף מתחרה לא זול מכם).
				"rankIn"		: 1.23,  // הדירוג שלכם בין מתחרים עם מלאי.
				"compCount"		: 3,  // מספר המתחרים עם מחיר תקין.
				"compInCount"		: 3,  // מספר המתחרים שיש להם מלאי.
				"compOutCount"		: 3,  // מספר המתחרים ללא מלאי.
				"compAvg"		: 123.56,  // ממוצע כל המתחרים.
				"compAvgVsMe"		: 123.56,  // הפער ב-convCurrency בין המחיר שלכם לממוצע המתחרים (שלילי = אתם זולים יותר).
				"compInAvg"		: 123.56,  // ממוצע המתחרים שיש להם מלאי.
				"compInAvgVsMe"		: 123.56,  // כמו "compAvgVsMe", אך רק למתחרים שיש להם מלאי.
				"compLowest"		: 123.56,  // המתחרה הזול ביותר.
				"compLowestVsMe"	: 123.56,  // כמו "compAvgVsMe", אך למתחרה הזול ביותר ולא לממוצע.
				"compInLowest"		: 123.56,  // המתחרה הזול ביותר שיש לו מלאי.
				"compInLowestVsMe"	: 123.56,  // כמו "compInAvgVsMe", אך ...
				"compHighest"		: 123.56,  // המתחרה היקר ביותר.
				"compHighestVsMe"	: 123.56,  // כמו "compAvgVsMe", אך ...
				"compInHighest"		: 123.56,  // המתחרה היקר ביותר שיש לו מלאי.
				"compInHighestVsMe"	: 123.56,  // כמו "compInAvgVsMe", אך ...
			},
			"competitors"	: [
				// מערך מתחרים מהזול ליקר; כל מתחרה הוא אובייקט:
				...
				{
					"url"		: "https://...",  // כולל תוספת hashtag אם הוגדרה.
					"ref"		: "example.com/123abc...def",
					// מזהה ה-URL: דומיין השורש ואחריו md5 בן 32 תווים; כך אנחנו מזהים כתובות במערכת.
					"domain"	: "example.com",  // דומיין השורש של המתחרה.
					"price"		: 1234.90,  // הסכום האחרון שנמצא באתר, לאחר חישובים לפי ההגדרות שלכם.
					"currency"	: "USD",  // המטבע שנמצא באתר.
					"priceConv"	: 1234.90,  // המחיר מומר ל-"convCurrency".
					"stock"		: "5",  // מלאי (מחרוזת): "A" = זמין; "2" = 2 יחידות; "0" = אזל; "" = לא ידוע.
					"salesWk"	: 123,  // הערכת מכירות בשבוע, אם קיימת (ראו סימן שאלה בעמוד המוצר).
					"screenshotURL"	: "https://pricezag.com/.../screenshot.png",
					// אם "withScreenshots" מופעל: כתובת צילום המסך העדכני. הגישה ציבורית באמצעות הכתובת הארוכה, ללא התחברות.
					"confidence"	: 98,
					// רמת הביטחון שהמחיר שנבחר נכון, באחוזים (ראו הסבר דרך (?) בעמוד מוצר).
					// מתחת ל-70% (ניתן לשינוי) מוצג סימן שאלה ליד המחיר כדי לציין שאינו אמין.
					// מדד זה נפרד מרמת התקלה: כתובת יכולה להיות תקולה למרות שהמחיר האחרון זוהה בוודאות,
					// או תקינה לביקור אך עם מחיר שזיהויו אינו ודאי.
					"sick"		: 0,  // רמת התקלה של הכתובת, מ-0 עד 3.
					// 0: הביקור האחרון הצליח ונמצא מחיר בדף.
					// 1: הביקור האחרון נכשל אך היה הצלחה לאחרונה; אין סיבה לדאגה.
					// 2: לא נמצא מחיר תקין במשך ימים רבים.
					// 3: לא נמצא מחיר תקין במשך שבועות רבים.
					// השדות "price" ו-"priceConv" מופיעים רק ברמות תקלה עד 1. ברמות 2 ו-3 אין מחיר.
				},
				...
			],
			"custom"	: {
				// אלה השדות המותאמים שלכם. להסבר, פתחו
				// עמוד מוצר בממשק ולחצו על (?) ליד תיבת CUSTOM FIELDS.
				// כשאין שדות מותאמים, האובייקט "custom" כולו לא מופיע.
				"variable_1"	: "value 1",  // ערכים מוחזרים תמיד כמחרוזות, גם אם הם מספרים.
				"variable_2"	: "value 2",  // אין ערך ריק: ערך כזה היה גורם למחיקת המשתנה.
				...
			}
		},
		...
	]
}

productGetAll — שליפת כל המוצרים

ודאו שההגדרה של timeout גבוהה מספיק, כי עיבוד הבקשה עשוי להימשך בהתאם למספר המוצרים והמתחרים.
{ "actions" : [
	...
	{
		"a"			: "productGetAll",
		"currency"		: "EUR",  // (אופציונלי) המרת כל הסכומים למטבע זה במקום למטבע של כל מוצר.
		"withStats"		: 1,  // (אופציונלי) החזרת אובייקט הסטטיסטיקות.
		"noCompetitors"		: 1,  // (אופציונלי) לא להחזיר מערך מתחרים כדי להקטין את הנתונים.
		"noComments"		: 1,  // (אופציונלי) לא להחזיר הערות (...)
		"withScreenshots"	: 1,  // (אופציונלי) החזרת כתובת תמונת צילום המסך העדכנית לכל מתחרה.
		"sickMax"		: 2,  // (אופציונלי, ברירת מחדל 1) ערך 0–3: החזרת כתובות רק עד רמת התקלה N.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"		: "productGetAll",
			"ok"		: 10,  // סך כל המוצרים.
			"products"	: [ // מערך מוצרים לפי סדר אלפאנומרי של קוד הסימוכין; כל מוצר הוא אובייקט:
				...
				{ ... },  // אובייקט מוצר כמו בתגובת productGet שלמעלה.
				...
			],
		},
		...
	]
}
מומלץ לבדוק גם את הפעולה categoryGet .

קטגוריות

categoryCreate — יצירת קטגוריה חדשה

זוהי אותה פונקציה שמשמשת את ממשק המשתמש בעמוד Categories, בעת לחיצה על New Category . ה-API מאפשר גם לשייך מוצרים בזמן יצירת הקטגוריה.
בניגוד לפעולות אחרות שמקבלות קטגוריות קיימות וחדשות (כמו productCreate), הפעולה הזאת תיכשל אם הקטגוריה כבר קיימת.
{ "actions" : [
	...
	{
		"a"		: "categoryCreate",
		"name"		: "The New Category Name",
		"name"		: ["New Category 1", "New Category 2"],  // אפשר גם להעביר מערך.
		"products"	: ["REF-CODE-1", "REF-CODE-2"],  // (אופציונלי) שייכו את המוצרים האלה לקטגוריות בעת יצירתן.
		"comments"	: "Some comments\nAnd another line",  // (אופציונלי) עד 1,000 תווי UTF-8
	},
	...
] }

categoryEdit — עריכת קטגוריה קיימת

כדאי לבדוק גם את הפעולה productCategories כדי לבחור את המתאימה לכם.
{ "actions" : [
	...
	{
		"a"			: "categoryEdit",
		"name"			: "The Category Name",		// ללא הבחנה בין אותיות גדולות לקטנות.
		"newName"		: "The Category Renamed",  // (אופציונלי)
		"products"		: ["REF-CODE-1", "REF-CODE-2"],  // (אופציונלי) החליפו את כל רשימת המוצרים.
		"productsAdd"		: ["REF-CODE-1", "REF-CODE-2"],  // (אופציונלי) הוסיפו מוצרים לקטגוריה.
		"productsRemove"	: ["REF-CODE-3", "REF-CODE-4"],  // (אופציונלי) הסירו את המוצרים מהקטגוריה בלי למחוק אותם.
		"comments"		: "To overwrite the comments.",  // (אופציונלי) עד 1,000 תווי UTF-8
	},
	...
] }
למעשה, "products", "productsAdd" ו- "productsRemove" כולן משנות את המוצרים המשויכים לקטגוריה, אך בדרכים שונות. להסרת כל המוצרים מהקטגוריה השתמשו ב- "products" : []
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryEdit",
			"ok"			: 5,  // מספר השינויים שבוצעו.
			// שינוי שם או הערות נספר כשינוי אחד, וכך גם כל הוספה או הסרה של מוצר.
			"name"			: "The Category Name",  // השם החדש אם שונה, או השם הקודם.
			"productsCount"		: 30,  // מספר המוצרים החדש בקטגוריה, גם אם לא השתנה.
			"productsAdded"		: 2,  // מספר המוצרים שנוספו לקטגוריה.
			"productsRemoved"	: 2,  // מספר המוצרים שהוסרו מהקטגוריה.
		},
		...
	]
}

categoryDelete — מחיקת קטגוריה אחת או כמה קטגוריות

זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל Categories, בוחרים את הקטגוריות ולוחצים על Selected Categories › Delete.
{ "actions" : [
	...
	{
		"a"			: "categoryDelete",
		"name"			: "The Category Name",  // מחרוזת ללא הבחנה בין אותיות גדולות לקטנות, או:
		"name"			: ["Category 1", "Category 2"],  // אפשר גם מערך למחיקת כמה קטגוריות (עד 1,000).
		"deleteProducts"	: 1,
		// כברירת מחדל הקטגוריה נמחקת והמוצרים פשוט יוצאים ממנה,
		// אבל עם deleteProducts כל המוצרים בקטגוריה נמחקים ללא אישור,
		// ואיתם גם כתובות המתחרים, בלי כל דרך לשחזר אותן!
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryDelete",
			"ok"			: 2,  // מספר הקטגוריות שנמחקו.
			"productsCount"		: 123,  // מספר המוצרים בקטגוריות האלה.
			"productsDeleted"	: 123,  // מספר המוצרים שנמחקו עקב האפשרות "deleteProducts".
			// מוצר שמשויך לכמה קטגוריות שצוינו נספר רק פעם אחת.
		},
		...
	]
}

categoryCopy — העתקה או העברה של מוצרים בין קטגוריות

העתיקו או העבירו מוצרים מקטגוריות מקור לקטגוריות יעד קיימות או חדשות. אפשר גם למזג קטגוריות (ראו דוגמאות בתחתית העמוד).
הפעולה אינה מוחקת מוצרים כלל, אלא משנה רק את שיוכם לקטגוריות.
זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל Categories, בוחרים את הקטגוריות ולוחצים על Selected Categories › Copy & More. כדאי לעיין שם בהסברים המפורטים.
{ "actions" : [
	...
	{
		"a"			: "categoryCopy",
		"categoriesFrom"	: ["Category 1", "Category 2"],  // התאימו מוצרים מקטגוריות המקור האלה.
		"removeMode"		: "cat",  // (אופציונלי) הסירו את המוצרים מקטגוריות "categoriesFrom" שצוינו.
		"removeMode"		: "all",  // (אופציונלי) הסירו את המוצרים מכל הקטגוריות שלהם.
		// אם "removeMode" חסר, המוצרים יישארו ב-"categoriesFrom" וגם יתווספו ל-"categoriesTo" (העתקה ולא העברה).
		"deleteMode"		: "cat",  // (אופציונלי) מחקו את קטגוריות "categoriesFrom" לאחר ההעתקה.
		"deleteMode"		: "all",  // (אופציונלי) מחקו את כל הקטגוריות שהמוצרים האלה משויכים אליהן.
		// אם "deleteMode" חסר, "categoriesFrom" ימשיכו להתקיים גם אחרי שהמוצרים הועברו מהן באמצעות "removeMode".
		"categoriesTo"		: ["Another Category 1", "Another Category 2"],
		// הוסיפו את כל המוצרים המתאימים לקטגוריות היעד האלה (ייווצרו אם אינן קיימות).
		"categoriesToClear"	: 1,  // (אופציונלי) רוקנו תחילה את קטגוריות היעד שאליהן מוסיפים מוצרים.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryCopy",
			"ok"			: 3,  // מספר הקטגוריות שהשתנו, מקור ויעד.
			// "ok" הוא הסכום של categoriesModified + categoriesCreated + categoriesDeleted.
			"categoriesModified"	: 2,  // מספר הקטגוריות הקיימות שהשתנו (מקור ויעד).
			"categoriesCreated"	: 1,  // מספר הקטגוריות החדשות שנוצרו.
			"categoriesDeleted"	: 0,  // מספר הקטגוריות שנמחקו עקב "deleteMode".
			"productsCount"		: 123,  // מספר המוצרים המתאימים ל-"categoriesFrom" שצוין.
			// מוצר שמופיע בכמה מקטגוריות "categoriesFrom" נספר רק פעם אחת.
		},
		...
	]
}

categoryGet — שליפת קטגוריה

{ "actions" : [
	...
	{
		"a"		: "categoryGet",
		"name"		: "The Category Name",  // ללא הבחנה בין אותיות גדולות לקטנות.
		"currency"	: "EUR",  // חובה אם withStats או withProducts; מטבע הסטטיסטיקות.
		"withStats"	: 1,  // להחזיר גם סטטיסטיקות (איטי יותר).
		"withProducts"	: 1,  // להחזיר גם את מוצרי הקטגוריה (עלול ליצור נתונים רבים).
		"noCompetitors"	: 1,  // עם withProducts: אל תחזירו את מערך המתחרים כדי לצמצם נתונים.
		"noComments"	: 1,  // עם withProducts: אל תחזירו הערות מוצרים (הערות הקטגוריה כן יוחזרו).
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"			: "categoryGet",
			"ok"			: 1,
			"name"			: "The Category Name",
			"created"		: 1234567890,  // זמן Epoch.
			"createdBy"		: "SOMEUSER",  // שם משתמש או "API".
			"comments"		: "Comments of this category",
			"commentsLast"		: 1234567890,  // זמן Epoch של עריכת ההערות האחרונה, אם הייתה.
			"commentsLastBy"	: "SOMEUSER",  // שם משתמש או "API".
			"productsCount"		: 10,  // מספר המוצרים בקטגוריה.
			"stats"		: {
				// אלה הסטטיסטיקות המוצגות בעמוד קטגוריה ובטבלת הקטגוריות בממשק.
				// להסבר, הוסיפו אותן כעמודות ברשימת הקטגוריות ולחצו על (?).
				// כל הסכומים במטבע "currency" שצוין בבקשה.
				// אזהרה: כשאין סכום (למשל compIn* בלי מתחרים במלאי), הערך הוא 0.
				"priceAvg"		: 123.45,  // המחיר הממוצע שלכם.
				"costAvg"		: 123.45,  // רק מוצרים עם עלות ידועה נכללים בממוצע הזה.
				"marginAvg"		: 10.5,  // אחוז (יכול להיות שלילי; רק מוצרים עם עלות נכללים).
				"rankAvg"		: 1.23,  // הדירוג הממוצע שלכם במחיר (1 = אין מתחרה זול מכם).
				"rankInAvg"		: 1.23,  // הדירוג הממוצע שלכם בין מתחרים עם מלאי.
				"productsCountComp"	: 9,  // מספר המוצרים שיש להם מתחרים.
				"productsCountCompIn"	: 7,  // מספר המוצרים עם מתחרים שיש להם מלאי.
				"compAvg"		: 123.56,  // ממוצע ממוצעי המחירים של כל המתחרים.
				"compAvgVsMe"		: 123.56,  // פער ממוצע במטבע המבוקש בין המחיר שלכם למחירי המתחרים (שלילי = אתם זולים יותר).
				"compInAvg"		: 123.56,  // כמו "compAvg", אך רק למתחרים עם מלאי.
				"compInAvgVsMe"		: 123.56,  // כמו "compAvgVsMe", אך רק למתחרים שיש להם מלאי.
				"compLowest"		: 123.56,  // כמו "compAvg", אך ממוצע המתחרה הזול בכל מוצר.
				"compLowestVsMe"	: 123.56,  // כמו "compAvgVsMe", אך ...
				"compInLowest"		: 123.56,  // כמו "compInAvg", אך ...
				"compInLowestVsMe"	: 123.56,  // כמו "compInAvgVsMe", אך ...
				"compHighest"		: 123.56,  // כמו "compAvg", אך ממוצע המתחרה היקר בכל מוצר.
				"compHighestVsMe"	: 123.56,  // כמו "compAvgVsMe", אך ...
				"compInHighest"		: 123.56,  // כמו "compInAvg", אך ...
				"compInHighestVsMe"	: 123.56,  // כמו "compInAvgVsMe", אך ...
			},
			"products"	: [ // מערך מוצרים לפי סדר אלפאנומרי של קוד הסימוכין; כל מוצר הוא אובייקט:
				...
				{ ... },  // אובייקט מוצר כמו בתגובת productGet.
				...
			],
		},
		...
	]
}

categoryGetAll — שליפת כל הקטגוריות

בניגוד ל- categoryGet, הפעולה categoryGetAll אינה מחזירה אובייקט נתונים לכל מוצר, כי מוצר יכול להשתייך לכמה קטגוריות והתוצאה עלולה להיות גדולה וכפולה. לקבלת נתוני מוצרים מומלץ להשתמש ב- categoryGet עבור כל קטגוריה, או ב- productGetAll ולמיין את התוצאות לפי קטגוריה.
{ "actions" : [
	...
	{
		"a"		: "categoryGetAll",
		"withStats"	: 1,  // להחזיר גם סטטיסטיקות (איטי יותר).
		"noComments"	: 1,  // לא להחזיר הערות כדי להקטין את הנתונים.
		"noProducts"	: 1,  // לא להחזיר את מערך המוצרים (...).
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"		: "categoryGetAll",
			"ok"		: 10,  // מספר הקטגוריות הכולל (אורך מערך "categories").
			"categories"	: [ // מערך קטגוריות לפי סדר אלפביתי; כל קטגוריה היא אובייקט:
				...
				{
					"name"			: "The Category Name",
					"created"		: 1234567890,  // זמן Epoch.
					"createdBy"		: "SOMEUSER",  // שם משתמש או "API".
					"comments"		: "Comments of this category",
					"commentsLast"		: 1234567890,  // זמן Epoch של עריכת ההערות האחרונה, אם הייתה.
					"commentsLastBy"	: "SOMEUSER",  // שם משתמש או "API".
					"productsCount"		: 2,  // מספר המוצרים בקטגוריה.
					"products"	: ["REF-CODE-1", "REF-CODE-2"],  // קודי הסימוכין של מוצריה לפי סדר, אלא אם noProducts=1.
					"stats"		: {
						// אם "withStats" מופעל, אותו אובייקט סטטיסטיקות כמו ב-categoryGet שלמעלה.
						...
					},
				}
				...
			],
		},
		...
	]
}

התראות

alertRecipientCreate — יצירת נמען התראות חדש

זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל Alerts ולוחצים על New Recipient .
לפרטים על כל שדה, לחצו על סמלי סימן השאלה הירוקים בחשבון שלכם.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientCreate",
		"email"		: "john@example.net",  // אפשר גם מספר טלפון להתראות SMS; ראו עזרה בממשק.
		"name"		: "john",  // שם תצוגה פשוט, לרוב שם פרטי (ללא הבחנה בין אותיות גדולות לקטנות).
		"maxFrequency"	: 1800,  // (אופציונלי, ברירת מחדל 7200) ראו עזרה בממשק.
		"simplify"	: 0,  // (אופציונלי, ברירת מחדל 1) הפעלת פישוט; ראו עזרה בממשק.
		"sleepEnabled"	: 1,  // (אופציונלי) הפעלת שעות שקטות.
		"sleepFrom"	: "18:30",  // (רק אם sleepEnabled) פורמט 24 שעות.
		"sleepTo"	: "07:00",  // (רק אם sleepEnabled) פורמט 24 שעות.
		"timezone"	: "America/Los_Angeles",  // (רק אם sleepEnabled) נתיב בתיקיות Linux /usr/share/zoneinfo.
				// רווחים יומרו לקווים תחתונים.
				// בדקו את אזור הזמן בטופס [New Recipient] בממשק כדי להשתמש בערך המדויק.
		"status"	: "hold",  // (אופציונלי) בחרו "hold" או "disable". כל ערך אחר, כולל "", מפעיל.
		"rules"		: [...],  // (אופציונלי) כללי התראה התחלתיים (מערך אובייקטי כללים), כמו "rulesAdd" ב-alertRecipientEdit שלהלן.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientCreate",
			"ok"	: 1,
		},
		...
	]
}

alertRecipientEdit — עריכת נמען ו/או כללי ההתראה שלו

זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל Alerts ולוחצים על Settings או Rules של נמען.
לפרטים על כל שדה, לחצו על סמלי סימן השאלה הירוקים בחשבון שלכם.
העמוד "email" קובע איזה נמען יעודכן. כל יתר השדות משנים את הגדרות הנמען הזה.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientEdit",
		"email"		: "john@example.net",  // אימייל או טלפון נוכחי (באותו פורמט שמחזיר alertGetAll).
		"newEmail"	: "john2@example.net",  // (אופציונלי) אימייל או טלפון חדש; ראו עזרה בממשק.
		"name"		: "john2",  // (אופציונלי) שם חדש.
		"maxFrequency"	: 1800,  // (אופציונלי) ראו עזרה בממשק.
		"simplify"	: 1,  // (אופציונלי) הפעלת פישוט; ראו עזרה בממשק.
		"sleepEnabled"	: 1,  // (אופציונלי) הפעלת שעות שקטות.
		"sleepFrom"	: "18:30",  // (רק אם sleepEnabled) פורמט 24 שעות.
		"sleepTo"	: "07:00",  // (רק אם sleepEnabled) פורמט 24 שעות.
		"timezone"	: "America/Los_Angeles",  // (רק אם sleepEnabled) ראו alertRecipientCreate למעלה.
		"status"	: "hold",  // (אופציונלי) "hold" או "disable"; כל ערך אחר, כולל "", הופך ל-"active".
		"rules"		: [{ruleObject}, {ruleObject}],  // (אופציונלי) החלפת כל הכללים הקיימים (מערך ריק מסיר את כולם).
				  // אם רוצים לשמור על הכללים הקיימים, אין לשלוח מערך "rules".
		"rulesAdd"	: [ // (אופציונלי) הוספת הכללים האלה לקיימים.
			...
			{  // זהו המבנה של אובייקט כלל:
				"name"		: "me_cross_avg",  // בעמוד Alerts פתחו [Rules] > [+ New Rule] ובחרו כלל כדי לראות את שם ה-API שלו.
				"disabled"	: 1,  // (אופציונלי) אין טעם ליצור כלל מושבת, אך alertRuleEdit יכול להשתמש בזה.
				"var_n"		: 123.00,  // משתנה "X" הופך ל-"var_x",
				"var_c"		: "USD",  // לכן ציינו את הערכים לפי דרישות הכלל,
				"var_h"		: 24,  // ויש כללים שאינם דורשים משתנים כלל.
				"direction"	: "both",  // או "drop" או "rise", אם לכלל יש כיוון.
				"categories"	: ["The Category 1", "The Category 2"],  // (אופציונלי) ריק או חסר = כל המוצרים.
				"ignoreOos"	: 1,  // (אופציונלי) התעלמות ממתחרים שאזל להם המלאי (ראו הממשק).
				"urlInclude"	: "",  // (אופציונלי, ללא הבחנה בין אותיות גדולות לקטנות).
				"urlExclude"	: "amazon",  // (אופציונלי, ללא הבחנה בין אותיות גדולות לקטנות).
				// "ruleNumber" הוא מזהה הכלל, למשל לשינוי או למחיקה בהמשך.
				// הוא יוחזר בקריאת הכללים, אך אי אפשר לקבוע אותו בעצמכם.
			}
			...
		],
		"rulesRemove"	: [1,4,7],  // (אופציונלי) ערכי "ruleNumber" של הכללים להסרה.
					// מקבלים את "ruleNumber" מפעולת alertGetAll שלהלן.
					// להסרת כל הכללים פשוט השתמשו ב-"rules" = [].
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientEdit",
			"ok"	: 3,  // מספר השינויים (משתנים וכללים שנוספו או הוסרו).
		},
		...
	]
}

alertRecipientDelete — מחיקת נמען התראות

המחיקה לצמיתות. כל כללי ההתראה וההיסטוריה של הנמען יימחקו מיד, ללא אפשרות שחזור.
{ "actions" : [
	...
	{
		"a"		: "alertRecipientDelete",
		"email"		: "john@example.net",  // אימייל או טלפון נוכחי (באותו פורמט שמחזיר alertGetAll).
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRecipientDelete",
			"ok"	: 1,
		},
		...
	]
}

alertRuleEdit — עריכת כלל התראה קיים

הפעולה מאפשרת לערוך כלל התראה יחיד וקיים במקום להחליף כללים או להוסיף כללים. לרוב משתמשים בה לשינוי המשתנה N, או להפעלה או להשבתה של כלל.
להסרת כלל השתמשו במערך "rulesRemove" בפעולה alertRecipientEdit ; להוספת כלל חדש השתמשו שם במערך "rulesAdd".
{ "actions" : [
	...
	{
		"a"		: "alertRuleEdit",
		"email"		: "john@example.net",  // אימייל או טלפון הנמען, בפורמט של alertGetAll.
		"ruleNumber"	: 1,  // מספר המזהה של הכלל לעריכה, כפי שמחזיר alertGetAll.
		"rule"		: {
			// המשתנים לדריסה; ראו "rulesAdd" ב-alertRecipientEdit לעיל למבנה אובייקט כלל.
			"disabled"	: 1,  // לדוגמה, להפעלה או להשבתה של כלל.
			"var_n"		: 5,  // או כל משתנה אחר, למשל N, בהתאם לסוג הכלל.
			...
		},
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "alertRuleEdit",
			"ok"	: 1,  // מספר המשתנים ששונו.
		},
		...
	]
}

alertGetAll — שליפת כל נמעני ההתראות והכללים שלהם

{ "actions" : [
	...
	{
		"a"	: "alertGetAll",
		// פעולה זו אינה מקבלת פרמטרים.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"		: "alertGetAll",
			"ok"		: 3,  // מספר הנמענים (אורך מערך "recipients").
			"recipients"	: [ // מערך כל הנמענים; כל אחד הוא אובייקט כמו ב-alertRecipientCreate לעיל.
				...
				{
					"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"		: [ // מערך כללים; כל אחד הוא אובייקט כפי שמתואר ב-alertRecipientEdit לעיל.
						...
						{
							"ruleNumber"	: 4,  // מספר סימוכין לשימוש אם רוצים לערוך כלל זה באמצעות alertRuleEdit.‏
							"name"		: "me_cross_avg",
							"disabled"	: 0,
							"var_n"		: "123.00",  // כל המשתנים מוחזרים כמחרוזות, גם אם ערכיהם מספריים.
							"var_c"		: "USD",
							"var_h"		: "24",
							"direction"	: "both",
							"categories"	: [],  // ערך ריק = כל המוצרים.
							"ignoreOos"	: 0,
							"urlInclude"	: "",
							"urlExclude"	: "amazon",
						}
						...
					],
				}
				...
			],
		},
		...
	]
}

כללי תמחור מחדש

repricingCreate — יצירת כלל תמחור מחדש

זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל Repricing ולחצו על New Repricing Rule .
לפרטים על כל שדה, לחצו על סמלי סימן השאלה הירוקים בחשבון שלכם.
איך משייכים מוצרים לכלל? עורכים את המוצרים עצמם באמצעות productEdit או productRepricing . כלל אינו באמת "מכיל" מוצרים; כל מוצר מפנה אל הכלל שמשויך אליו.
{ "actions" : [
	...
	{
		"a"	: "repricingCreate",
		"name"	: "The Rule Name",  // עד 50 תווים.
		"init"	: { // אובייקט כלל ההתחלה (השורה הראשונה "Set my price to").
			"target"	: "cheapest_n",  // (ראו רשימה להלן).
			"var_n"		: 3,  // רק אם היעד דורש משתנה N.‏
			"plusAmount"	: -2,  // חיובי = מעל, שלילי = מתחת.
			"plusCurrency"	: "%",  // מטבע (למשל "USD") או "%".
			// המשמעות: "קבעו את המחיר שלי 2% מתחת לממוצע של שלושת המתחרים הזולים ביותר".
			// אזהרה: בניגוד לאובייקטי "never" שלהלן, לכלל ההתחלה אין "direction". הסימן של "plusAmount" קובע מעל/מתחת.
		},
		"never"	: [ // (אופציונלי) תנאי "אבל לעולם לא", מבוצעים לפי סדרם (עד 10).
			{
				"target"	: "cheapest_n_in",  // (ראו רשימה להלן).
				"var_n"		: 1,  // רק אם היעד דורש משתנה N.‏
				"direction"	: "below",  // או "above".
				"plusAmount"	: -10,  // חיובי להוספה, שלילי להפחתה (חובה גם כש-0).
				"plusCurrency"	: "USD",  // מטבע או "%" (חובה גם אם plusAmount=0).
				// המשמעות: "אבל לעולם לא פחות מהמתחרה הזול ביותר שיש לו מלאי, פחות 10.00 USD".
			},
			{
				"target"	: "cost",
				"direction"	: "below",
				"plusAmount"	: 5,
				"plusCurrency"	: "%",
				// המשמעות: "אבל לעולם לא פחות מהעלות שלי בתוספת 5%".
			}
		],
		"ignoreDomains"	: "amazon ebay.com MyLabel1",  // (אופציונלי) דומיינים או תוויות של מתחרים להתעלמות (לא תלוי גודל אותיות; ראו ממשק).
		"charm"		: "none|zeros|charm",  // (אופציונלי, ברירת מחדל "none") תמחור פסיכולוגי; "", "none" או השמטה הם זהים.
		"confidence"	: 82,  // (אופציונלי, ברירת מחדל 70) אחוז ביטחון מינימלי 0–99 (ראו ממשק).
		"disabled"	: 1,  // (אופציונלי)
	},
	...
] }
// כל ערכי "target" האפשריים:
// "average": ממוצע כל המתחרים.
// "average_in": ממוצע מתחרים עם מלאי.
// "cheapest_n": ממוצע N המתחרים הזולים ביותר (או הזול ביותר כש-N=1).
// "cheapest_n_in": ממוצע N המתחרים הזולים ביותר עם מלאי.
// "highest_n": ממוצע N המתחרים היקרים ביותר.
// "highest_n_in": ממוצע N המתחרים היקרים ביותר עם מלאי.
// "cost": העלות שלי.
// "me_avg_n": ממוצע המחיר שלי ב-N השעות האחרונות (להגבלת מהירות שינוי המחיר).
// "domain:example.com": המחיר ב-example.com (הנמוך ביותר כשיש כמה).
// "domainIn:example.com": המחיר ב-example.com רק כשיש מלאי.
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingCreate",
			"ok"	: 3,  // מספר האובייקטים שפוענחו ונשמרו (למשל init + never[0] + never[1] = 3).
			"name"	: "The Rule Name",  // שם הכלל הסופי במסד הנתונים (ייתכן שתווים מיוחדים הומרו).
		},
		...
	]
}

repricingEdit — עריכת כלל תמחור מחדש קיים

שינוי כלל תמחור מחדש קיים.
ראו repricingCreate למעלה כדי להבין כיצד המשתנים האלה פועלים.
הפעולה משנה את הכלל עצמו ולא את המוצרים המשויכים אליו. כדי לשייך מוצרים לכללים יש להשתמש ב- productEdit או productRepricing במקום זאת.
{ "actions" : [
	...
	{
		"a"		: "repricingEdit",
		"name"		: "The Rule Name",  // ללא הבחנה בין אותיות גדולות לקטנות.
		"newName"	: "The Rule Renamed",  // (אופציונלי) עד 50 תווים.
		"init"		: { // (אופציונלי) דריסת משתני אובייקט ההתחלה אם סופקו (ראו repricingCreate).
			"plusAmount"	: 1,  // למשל, אפשר לשנות רק "plusAmount" ולהשאיר את שאר המשתנים ללא שינוי.
			// אזהרה: אם "target" חדש דורש משתנה N, יש לספק "var_n".‏
		},
		"never"		: [...], // (אופציונלי) אפשר להחליף את כל מערך "never", אך בדרך כלל עדיף להשתמש ב-never_*.
		// המשמעות: "never":[] מוחק את כל התנאים. כדי לשמור עליהם פשוט השמיטו את המשתנה.
		"never_0"	: { // (אופציונלי) דריסת אובייקט "אבל לעולם לא" הראשון (אינדקס מערך 0).
			"var_n"		: 2,  // למשל, אפשר לשנות רק "var_n" ולהשאיר את שאר המשתנים.
		},
		"never_2"	: {
			"target"	: "",  // השבתת תנאי "אבל לעולם לא" השלישי (אינדקס מערך 2).
			// כש-"target" מוגדר ל-"", אין צורך להתייחס לשאר משתני האובייקט.
			// גם "never_2":{} עושה את אותו הדבר.
		},
		"never_6"	: {...}, // זה יכול להיות תנאי "אבל לעולם לא" חדש, ולכן צריך לציין את כל המשתנים כמו ב-repricingCreate.
		// "never_9" הוא הערך המרבי כי מערך "never" מכיל לכל היותר 10 איברים.
		"ignoreDomains"	: "",  // (אופציונלי) כמו repricingCreate.‏
		"charm"		: "zeros",  // (אופציונלי) ...
		"confidence"	: 82,  // (אופציונלי) ...
		"disabled"	: 1,  // (אופציונלי) 0 להפעלת כלל שמושבת כעת.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingEdit",
			"ok"	: 3,  // מספר השינויים (למשל משתנה מ-never_N, משתנה מ-"init" ו-"charm").
			"name"	: "The Rule Name",  // השם הסופי החדש במסד הנתונים (ייתכן שתווים מיוחדים הומרו).
		},
		...
	]
}

repricingDelete — מחיקת כלל תמחור מחדש

המחיקה לצמיתות. הכלל נמחק מיד ולצמיתות מהחשבון. מוצרים שהשתמשו בו יישארו ללא כלל, ולכן התמחור מחדש שלהם ייכשל.
{ "actions" : [
	...
	{
		"a"		: "repricingDelete",
		"name"		: "The Rule Name",  // ללא הבחנה בין אותיות גדולות לקטנות.
		"onlyIfUnused"	: 1,  // (אופציונלי) לבטיחות, החזרת שגיאה אם יש מוצרים שמשתמשים בכלל הזה.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"		: "repricingDelete",
			"ok"		: 1,
			"productsCount"	: 10,  // מספר המוצרים שהשתמשו בכלל וכעת אינם משויכים לכלל.
		},
		...
	]
}

repricingGetAll — שליפת כל כללי התמחור מחדש

תחילה עיינו ב- repricingCreate למעלה, כי מבנה הנתונים המוחזר כאן דומה מאוד לנתונים ששולחים ל-repricingCreate.
{ "actions" : [
	...
	{
		"a"	: "repricingGetAll",
		// אין פרמטר נוסף לפעולה.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "repricingGetAll",
			"ok"	: 10,  // מספר הכללים הכולל (אורך מערך "rules").
			"rules"	: [ // מערך כללי תמחור מחדש בסדר אלפביתי; כל כלל הוא אובייקט:
				...
				{
					"name"		: "Some Repricing Rule",
					"created"	: 1234567890,  // זמן Epoch של יצירת הכלל.
					"createdBy"	: "SOMEUSER",  // שם משתמש או "API".
					"edited"	: 1234567890,  // מועד עריכה אחרונה, אם הייתה; אחרת השדה לא מופיע.
					"editedBy"	: "SOMEUSER",  // שם משתמש או "API", או לא מופיע.
					"disabled"	: 1234567890,  // אם הכלל מושבת, זמן Epoch של השבתתו האחרונה; אחרת חסר.
					"disabledBy"	: "SOMEUSER",  // שם משתמש או "API", או לא מופיע.
					"productsCount"	: 10,  // מספר המוצרים שמשתמשים בכלל כעת.
					"ignoreDomains"	: "amazon ebay.com MyLabel1",  // דומיינים או תוויות מתחרים שמתעלמים מהם (ראו ממשק).
					"charm"		: "charm",  // מצב תמחור פסיכולוגי (none|zeros|charm).
					"confidence"	: 82,  // אחוז ביטחון מינימלי 0–99 (ראו ממשק).
					"init"	: { // אובייקט כלל ההתחלה (השורה הראשונה "Set my price to").
						"target"	: "cheapest_n",  // (ראו רשימה ב-repricingCreate).
						"var_n"		: 3,  // אם היעד דורש N; אחרת השדה חסר.
						"plusAmount"	: -2,  // חיובי = מעל, שלילי = מתחת.
						"plusCurrency"	: "%",  // מטבע (למשל "USD") או "%".
						// המשמעות: "קבעו את המחיר שלי 2% מתחת לממוצע של שלושת המתחרים הזולים ביותר".
						// אזהרה: בניגוד לאובייקטי "never" שלהלן, לכלל ההתחלה אין "direction". הסימן של "plusAmount" קובע מעל/מתחת.
					},
					"never"	: [ // אובייקטי "אבל לעולם לא", לפי סדר הביצוע.
						{
							"target"	: "cheapest_n_in",
							"var_n"		: 1,
							"direction"	: "below",  // או "above".
							"plusAmount"	: -10,  // חיובי להוספה, שלילי להפחתה.
							"plusCurrency"	: "USD",  // מטבע או "%".
							// המשמעות: "אבל לעולם לא פחות מהמתחרה הזול ביותר שיש לו מלאי, פחות 10.00 USD".
						},
						{},  // כלומר, השארתם את השורה השנייה של תנאי "אבל לעולם לא" ריקה.
						{
							"target"	: "cost",
							"direction"	: "below",
							"plusAmount"	: 5,
							"plusCurrency"	: "%",
							// המשמעות: "אבל לעולם לא פחות מהעלות שלי בתוספת 5%".
						}
					],
				}
				...
			],
		},
		...
	]
}

גיליונות נתונים

spreadsheetDownload — הורדת גיליון נתונים

פעולה זו היא חריגה: אי אפשר לשלב אותה עם פעולות אחרות והיא מחזירה קובץ גיליון נתונים במקום אובייקט JSON (אלא אם משתמשים ב-"savePreset" או "downloadURL" שלהלן)
היא מקבילה לפעולות שמבצעים בעמוד Export בחשבון שלכם.
ודאו שההגדרה של timeout גבוהה מספיק, כי יצירת גיליון גדול עשויה לקחת לשרת זמן.
דרך קלה: לחצו על Show API equivalent בעמוד הייצוא כדי ליצור בקשת JSON מלאה (ופקודת curl) לפי ההגדרות שבחרתם בטופס.
{ "actions" : [
	{
		"a"		: "spreadsheetDownload",
		"preset"	: "Some Preset Name",  // (אופציונלי) במקום כל הפרטים שלהלן אפשר להשתמש בתבנית מוכנה שלכם או שלנו.
			// לתבנית שלכם ציינו שם מלא בלי שם משתמש לפניו ובלי מטבע אחריו.
			// למציאת שמות תבניות ברירת המחדל, פתחו את תפריט DIRECT DOWNLOAD בעמוד Export והצביעו עליהן עם העכבר.
			// למשל "pricezag_backup" היא תבנית הגיבוי המיוחדת שלנו (ראו "Special BACKUP format to re-import" בתפריט DIRECT DOWNLOAD).
			// אפשר לציין גם שדות נוספים שידרסו את הגדרות התבנית, למשל מטבע, פורמט או קטגוריות שונים.
		"savePreset"	: "My New Preset Name",  // (אופציונלי) שמירת ההגדרות שלהלן כתבנית חדשה לשימוש בממשק וב-API.
			// חריג לחריג: עם savePreset לא מורידים גיליון; במקום זאת מוחזר אובייקט JSON רגיל.
		"savePresetOverwrite"	: 1,  // (אופציונלי) דריסת תבנית קיימת בשם "savePreset"; בלעדי זאת תוחזר שגיאה.
			// אזהרה: דריסה מוחקת את כל הגדרות התבנית הקודמת, לא רק שדה יחיד.
			// לשינוי שם או למחיקת תבנית השתמשו ב-spreadsheetPresetEdit שלהלן.
		"downloadURL"	: 1,  // (אופציונלי) חריג נוסף: במקום קובץ גיליון תוחזר תגובת JSON רגילה עם "fileURL",
			// כתובת ציבורית לקובץ ללא התחברות או מפתח API. הקובץ זמין להורדה לכולם במשך 15 דקות.
			// הערך "ok" יהיה מספר השורות, ו-"fileSize" יציין את גודל הקובץ בבתים.
		"format"	: "xlsx|xls|csv|csv-tab",  // ברירת מחדל csv בשימוש דרך API.
		"currency"	: "USD",  // חובה ללא preset; המטבע של כל הסכומים.
		"categories"	: ["Category 1", "Category 2"],  // הציגו רק מוצרים מהקטגוריות האלה; אחרת כל המוצרים.
		"historyPeriod"	: "prev_6mo",  // (אופציונלי, ברירת מחדל "now").
			// קודם קראו את ההסברים דרך סימני השאלה (?) בעמוד Export על תקופות היסטוריה.
			// "historyPeriod" קובע כמה רחוק אחורה לקרוא נתונים, לפני חלוקתם לשורות לכל מוצר לפי "historyRow".
			// "now": בלי היסטוריה; רק הנתונים הנוכחיים (ללא "historyRow").
			// "all": כל התקופה מאז ההרשמה, לפחות עבור המוצרים הרלוונטיים. עלול להיות אטי.
			// "1234500000-1237800000": טווח זמנים מותאם אישית לפי Epoch, התחלה–סיום.
			// "123h": 123 השעות האחרונות, בלי עיגול לגבולות השעה; הסיום הוא עכשיו.
			// "cur_123(d|wk|mo|yr)": 123 ימים/שבועות/חודשים/שנים אחרונים, כולל התקופה הנוכחית החלקית. "cur_2mo" ביום העשירי מכסה 40 יום.
			// "prev_123(d|wk|mo|yr)": 123 תקופות שהסתיימו. "prev_2mo" ב-10 בפברואר מכסה את 62 ימי דצמבר וינואר.
			// תחילת cur_* ו-prev_* וסיום prev_* מעוגלים לחצות של היום הקודם; סיום cur_* הוא כרגע,
			// ולכן "cur_2d" שהורד בצהריים מכסה 36 שעות, ואילו "prev_2d" מכסה 48 שעות שמסתיימות לפני 12 שעות.
		"historyRow"	: "2w",  // חובה אם "historyPeriod" אינו "now".
			// "historyRow" קובע את פרק הזמן שכל שורה מייצגת (ממוצע התקופה), ולכן ייתכנו כמה שורות למוצר, פרט ל-"all".
			// אפשר לחשוב על "historyRow" כחלוקת "historyPeriod" לשורות נפרדות לכל מוצר.
			// "all": ממוצע כל historyPeriod בשורה אחת למוצר.
			// "123(d|wk|mo|qt|yr)": תקופות קלנדריות של 123 ימים/שבועות/חודשים/רבעונים/שנים, מחצות. אפשר להשמיט 123 כאשר הערך 1, למשל "wk" במקום "1wk".
			// אם מורידים בשבת עם historyRow:"7d", כל שורה היא ממוצע של שבת 00:00 עד שישי 23:59.
			// אבל עם historyRow:"1wk", כל שורה מייצגת שני 00:00 עד ראשון 23:59, והשורה האחרונה היא השבוע הנוכחי החלקי שני–שבת.
			// ◀ מגבלה של 500,000 שורות: הממשק וה-API ידחו היסטוריה שיוצרת יותר מחצי מיליון שורות.
			// למשל historyRow:"day" כאשר historyPeriod מכסה 365 ימים ו-1,400 מוצרים עלול לחרוג מהמגבלה.
			// במקרה כזה הורידו גיליון נפרד לכל קטגוריה בת כמה מאות מוצרים.
		"timezone"	: "America/Los_Angeles",  // (אופציונלי, ברירת מחדל "UTC") בפורמט נתיב תיקיות Linux /usr/share/zoneinfo.‏
			// רווחים יומרו לקווים תחתונים.
			// אזור זמן נדרש רק אם אפשרויות history* תלויות בתקופות קלנדריות (לזיהוי חצות).
			// הממשק משתמש באזור הזמן של המשתמש; ב-API צריך לספק אותו בבקשה.
		// ========== עמודות ==========
		// המשתנים column* מגדירים אילו עמודות יופיעו בגיליון (לפרטים ראו טופס Export בממשק).
		// ברירת המחדל לכל המשתנים היא 0 (ללא עמודה), פרט ל-Code.
		"columnCode"		: 1,  // אי אפשר להסיר את עמודת REF-CODE של כל מוצר.
		"columnName"		: 1,  // שם המוצר.
		"columnCategories"	: 1,  // הקטגוריות הנוכחיות של המוצר ("Category 1; Category 2" בתא אחד).
		"columnComments"	: 1,  // הערות המוצר.
		"columnCreated"		: 1,  // תאריך יצירת המוצר YYYY/MM/DD במערכת.
		"columnCustom"		: 1,  // השדות המותאמים של המוצרים (עמודה לכל משתנה ייחודי).
		"columnPrice"		: 1,  // מחיר המוצר במטבע שביקשתם, לא במטבע המקורי.
		"columnCost"		: 1,  // עלות המוצר (במטבע המבוקש).
		"columnMargin"		: 1,  // אחוז הרווחיות לפי מחיר ועלות.
		"columnRank"		: 1,  // הדירוג שלי.
		"columnInRank"		: 1,  // הדירוג שלי בין מתחרים עם מלאי.
		"columnMyWebsite"	: 1,  // כתובת האתר שלי.
		"columnReprice"		: 1,  // סכום התמחור מחדש (במטבע המבוקש).
		"columnRepricingRule"	: 1,  // שם כלל התמחור מחדש.
		"columnRecommended"	: 1,  // מחיר מומלץ (ראו עזרה בעמוד Export).
		"columnCompUrls"	: 1,  // כתובות המתחרים, אחת בכל עמודה.
		"columnCompUrlsJoin"	: 1,  // כתובות המתחרים מופרדות ברווח בתא אחד.
		"columnCompMinMaxAvg"	: 1,  // מוסיף שלוש עמודות: מינימום, מקסימום וממוצע של מתחרים.
		"columnInCompMinMaxAvg"	: 1,  // מוסיף שלוש עמודות: מינימום, מקסימום וממוצע למתחרים עם מלאי.
		"columnCompPrice"	: 1,  // עמודה לכל מתחרה עם המחיר שלו (במטבע המבוקש).
		"columnCompStock"	: 1,  // עמודה לכל מתחרה עם מלאי (123|IN|OUT).
		"columnCompSales"	: 1,  // עמודה לכל מתחרה עם מכירות לשבוע.
		"columnCompRank"	: 1,  // עמודה לכל מתחרה עם דירוגו בין כולם (כולל אתכם).
		"columnCompInRank"	: 1,  // עמודה לכל מתחרה עם דירוגו בין המתחרים עם מלאי (כולל אתכם).
		// ========== פרמטרים מתקדמים לא רשמיים ==========
		// יש גם הגדרות לא רשמיות שלא מתועדות בפירוט, חלקן משמשות את "pricezag_backup".‏
		"originalCurrencies"	: 1,  // במקום המרת סכומים למטבע שבחרתם כמספרים, התאים יהיו מחרוזות עם המטבע המקורי ("123.90 USD").
		"keepUrlLabels"		: 1,  // בדרך כלל אנחנו מסירים תוויות מכתובות מתחרים; אפשרות זו משאירה אותן, למשל לגיבוי.
		"csvSeparator"		: ";",  // שימוש במפריד CSV אחר במקום פסיק או טאב.
		"csvNoQuote"		: 1,  // מניעת שימוש במירכאות (") ב-CSV, אך זה עלול לפגוע בתקינות הקובץ.
	}
] }
// דרך פשוטה להוריד גיבוי CSV:
// curl --connect-timeout 15 --max-time 600 --retry 2 -X POST 'https://pricezag.com/api/v3/MYAPIKEY' -d '{"actions":[{"a":"spreadsheetDownload","preset":"pricezag_backup"}]}' -o pricezag-backup-20241225.csv

spreadsheetPresetEdit — שינוי שם או מחיקה של תבנית גיליון

זהה לפעולה שמתבצעת כשנכנסים לעמוד Export ולוחצים על Edit Presets .
הפעולה מיועדת רק לשינוי שם או למחיקה של תבנית. כדי ליצור תבנית חדשה או לשנות תבנית קיימת השתמשו בפעולה spreadsheetDownload שלמעלה.
{ "actions" : [
	{
		"a"		: "spreadsheetPresetEdit",
		"preset"	: "Some Preset Name",  // השם הנוכחי של התבנית.
		"newName"	: "The Renamed Preset",  // שם חדש לתבנית.
		"delete"	: 1,  // מחיקת התבנית "preset" הזאת מהחשבון.
		// אי אפשר למחוק תבנית שמשמשת לייצוא אוטומטי; תוחזר שגיאה.
		// קודם מחקו את הייצואים האוטומטיים המתוזמנים שמשתמשים בה (ראו Export).
	}
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetPresetEdit",
			"ok"	: 1,
		},
		...
	]
}

spreadsheetAutoCreate — יצירת ייצוא אוטומטי חדש

זהה לפעולה שמתבצעת כשנכנסים לעמוד Export ולוחצים על Add a new Auto-Export .
{ "actions" : [
	{
		"a"			: "spreadsheetAutoCreate",
		"preset"		: "The Preset Name",
		"email"			: "john@example.net",
		"currency"		: "USD",  // (אופציונלי) ברירת מחדל "preset", כלומר המטבע של התבנית.
		"attach"		: "link",  // (אופציונלי, ברירת מחדל "attach") "attach" לקובץ מצורף, "link" לקישור הורדה מתארח.
		"everyMonday"		: 1,  // שליחת הגיליון בכל יום שני.
		"everyTuesday"		: 1,  // וכן לכל שאר ימי השבוע עד "everySunday".‏
		"everyMonthDay1"	: 15,  // שליחה בכל 15 בחודש.
		"everyMonthDay2"	: 21,  // וגם בכל 21 בחודש.
		"everyMonthDay3"	: "last",  // וגם ביום האחרון של כל חודש.
			// everyMonthDay* מקבל מספרים 0–9, עד עשרה ימים בחודש.
		"time"			: "3:59pm",  // גם "15.59" תקין ויומר ל-"3:59pm"; גם "0:9", "0.09", "00:09", "0:09am" שווי ערך.
		"timezone"		: "America/Los_Angeles",  // (אופציונלי, ברירת מחדל "UTC") בפורמט נתיב תיקיות Linux /usr/share/zoneinfo.‏
			// רווחים בשם העיר יומרו לקווים תחתונים.
	}
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetAutoCreate",
			"ok"	: 1,
			"id"	: "5gwi6fqa",  // מזהה הייצוא האוטומטי, למקרה שתרצו לערוך אותו מאוחר יותר (ראו spreadsheetAutoEdit).
		},
		...
	]
}

spreadsheetAutoEdit — עריכת ייצוא אוטומטי

זהה לפעולה שמתבצעת כשנכנסים לעמוד Export בעמוד, על ידי לחיצה על Edit ברשימה שמתחת לכותרת AUTO-EXPORT TO EMAIL.
{ "actions" : [
	{
		"a"			: "spreadsheetAutoEdit",
		"id"			: "5gwi6fqa",  // מזהה הייצוא האוטומטי לעריכה.
			// המזהה מוחזר ב-spreadsheetAutoCreate ומופיע גם בכותרת חלון העריכה לאחר לחיצה על Edit.
		"disabled"		: 1,  // (אופציונלי) 0 להפעלת ייצוא אוטומטי שמושבת כעת.
		"delete"		: 1,  // (אופציונלי) מחיקה מלאה של הייצוא האוטומטי הזה.
		// הפרמטרים הבאים (כולם אופציונליים) זהים לאלה שב-spreadsheetAutoCreate למעלה.
		"preset"		: "The Preset Name",
		"email"			: "john@example.net",
		"currency"		: "USD",
		"attach"		: "link",
		"everyMonday"		: 1,  // אזהרה: ציון אפילו משתנה every* אחד מוחק את כל משתני every* הקודמים,
		"everyMonthDay1"	: 15,  // כך שאם "everyFriday"=1 קודם, קביעת "everyMonthDay3" תסיר את "everyFriday".‏
		// וכן הלאה; ראו ב-spreadsheetAutoCreate את שאר משתני every*.
		"time"			: "3:59pm",
		"timezone"		: "America/Los_Angeles",
	}
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "spreadsheetAutoEdit",
			"ok"	: 3,  // מספר השינויים שבוצעו.
		},
		...
	]
}

מתחרים ועוד

competitorDeleteAll — מחיקת מתחרה מכל המוצרים או הקטגוריות

הפעולה מוחקת באופן גורף כתובות URL של מתחרה, מכל המוצרים או מכל המוצרים בקטגוריות מסוימות.
אזהרה: כתובות ה-URL של המתחרים נמחקות מיד ולצמיתות, ללא אפשרות שחזור.
זו אותה פונקציה שמשמשת את ממשק המשתמש כשפותחים עמוד של מתחרה ולוחצים על Delete from all Productsאו כשפותחים עמוד של קטגוריה ולוחצים על (X) ברשימת המתחרים.
{ "actions" : [
	...
	{
		"a"		: "competitorDeleteAll",
		"domain"	: "competitordomain.com",
		"categories"	: ["The Category 1", "The Category 2"],  // (אופציונלי) אם לא סופק, חובה להשתמש ב-"allProducts"=1.
		"allProducts"	: 1,  // (אופציונלי) מחיקה מכל המוצרים (אסור לציין "categories").
		// יש לציין או "categories" או "allProducts", לא שניהם ולא אף אחד.
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "competitorDeleteAll",
			"ok"	: 10,  // מספר כתובות ה-URL שנמחקו.
		},
		...
	]
}

mathEdit — הגדרה או עריכה של חישובי מחיר לדומיין מתחרה

זוהי אותה פונקציה שמשמשת את ממשק המשתמש כשנכנסים אל Domains, בוחרים דומיין של מתחרה מהרשימה ולוחצים על Mathematically alter the price. כל האפשרויות בטופס זמינות גם באמצעות פעולת ה-API mathEdit.
לפרטים על כל שדה, לחצו על סמלי סימן השאלה הירוקים בחשבון שלכם.
{ "actions" : [
	...
	{
		"a"		: "mathEdit",
		"domain"	: "competitordomain.com",
		"clear"		: 1,  // (אופציונלי) השבתת כל החישובים לדומיין (ומחיקת כל ההגדרות הקודמות).
		// אם clear:1, אסור לציין שום פרמטר נוסף להלן, אחרת תוחזר שגיאה.
		"math"	: [  // מערך בלוקי החישוב להחלה.
			{  // זהו אובייקט בלוק חישוב; כל השדות אופציונליים.
				"categories"		: ["Category 1", "Category 2"],  // רק למוצרים מהקטגוריות האלה.
				"theirPriceMin"		: 1234.90,  // רק כאשר המחיר שלהם גדול מ-N או שווה לו.
				"theirPriceMinCurrency"	: "USD",  // מטבע (אפשר להשתמש ב-"original" למטבע האתר).
				"theirPriceMax"		: 1234.90,  // קטן מ-N או שווה לו.
				"theirPriceMaxCurrency"	: "USD",  // מטבע (...).
				"themMeMin"		: -20.00,  // רק כאשר ההפרש [הם פחות אני] גדול מ-N או שווה לו (ראו ממשק).
				"themMeMinCurrency"	: "USD",  // מטבע או "%" מהמחיר שלכם (לא "original" כאן).
				"themMeMax"		: -1.5,  // קטן מ-N או שווה לו.
				"themMeMaxCurrency"	: "%",  // מטבע (...).
				"addPre"		: -10.00,  // סכום להוספה לפני הכפל, או להפחתה אם הוא שלילי.
				"addPreCurrency"	: "USD",  // מטבע (אפשר להשתמש ב-"original" למטבע האתר).
				"multiply"		: 1.1,  // הכפילו במקדם הזה.
				"divide"		: 1.1,  // או חלקו בו; אל תציינו את שתי האפשרויות.
				"addPost"		: 5.00,  // סכום להוספה לאחר הכפל, או להפחתה אם הוא שלילי.
				"addPostCurrency"	: "USD",  // מטבע (...).
				// נראה מסובך? ראו את הדוגמה הפשוטה מתחת לתגובה.
			},
			... // עד עשרה בלוקים בסך הכול, לפי סדר הביצוע.
		],
		// אי אפשר כרגע לשנות משתנה או בלוק יחיד. שליחת מערך math מחליפה את הכול.
		// בלוק שלא מבצע כפל או חילוק (ריק או 1) וגם לא מוסיף addPre או addPost שאינם אפס, יידחה,
		// ואם כל הבלוקים נדחו, התוצאה זהה למחיקת כל החישובים עם clear:1.‏
		// במילים אחרות, החישוב חייב באמת לשנות משהו כדי להישמר.
		// טיפ: כדי להשבית זמנית חישוב של דומיין בלי למחוק הגדרות,
		// אפשר להגדיר categories : ["Some Empty Existing Category"].
	},
	...
] }
תגובה:
{
	...
	"actions" : [
		...
		{
			"a"	: "mathEdit",
			"ok"	: 3,  // מספר בלוקי החישוב ששונו (גם הסרה נחשבת לשינוי).
		},
		...
	]
}
דוגמה פשוטה — הסרת מס בשיעור 10% בכל amazon.co.uk:
{ "actions" : [
	{
		"a"		: "mathEdit",
		"domain"	: "amazon.co.uk",
		"math"		: [
			{
				"divide"	: 1.1
			}
		]
	}
] }

דוגמאות נוספות

הבקשות האלה הן נתוני POST שנשלחים אל https://pricezag.com/api/v3/MYAPIKEY
◀ דוגמה 1 — עדכון עלות של מוצר
בקשה:
{
	"actions" : [
		{
			"a"		: "productEdit",
			"code"		: "SKU-1234",
			"cost"		: 140.50,
			"costCurrency"	: "EUR"
		}
	]
}
תגובה:
{
	"ok"		: 1,  // יחזיר 0 אם SKU-1234 כבר בעל העלות הזו.
	"errors"	: 0,  // יחזיר 1 אם SKU-1234 אינו קיים.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "productEdit",
			"ok"	: 1  // יחזיר 0 אם העלות כבר זהה, ו--1 אם המוצר לא קיים.
		}
	]
}

◀ דוגמה 2 — שליפת מוצר שאינו קיים
בקשה:
{
	"actions" : [
		{
			"a"		: "productGet",
			"code"		: "NON-EXISTING-SKU",
			"currency"	: "USD"
		}
}
תגובה:
{
	"ok"		: 0,  // כי אף פעולה לא החזירה ok>0.
	"errors"	: 1,  // כי פעולה אחת החזירה ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "productGet",
			"ok"	: -1,  // כך יודעים שהפעולה נכשלה.
			"error"	: "Sorry, the product #NON-EXISTING-SKU does not exist. Maybe someone else just removed or renamed it?"
		}
	]
}

◀ דוגמה 3 — יצירת קטגוריה, כלל תמחור מחדש ושני מוצרים המשויכים אליהם
בקשה:
{
	"actions" : [
		{
			"a"		: "categoryCreate",
			"name"		: "My New Category"
		},
		{
			"a"		: "repricingCreate",
			"name"		: "My New Repricing Rule",
			"init"	: {
				"target"	: "cheapest_n",
				"var_n"		: 2,
				"plusAmount"	: 0,
				"plusCurrency"	: "%"
				// המשמעות: "קבעו את המחיר שלי באמצע בין שני המתחרים הזולים ביותר".
			},
			"never"	: [
				{
					"target"	: "cost",
					"direction"	: "below",
					"plusAmount"	: 5,
					"plusCurrency"	: "%"
					// המשמעות: "אבל לעולם לא פחות מהעלות שלי בתוספת 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",  // אותו שם כלל שיצרנו זה עתה.
			"categories"	: ["My New Category"],	// אותו שם קטגוריה שיצרנו זה עתה.
			// למרות ש-productCreate היה יוצר ממילא קטגוריות שאינן קיימות, ולכן categoryCreate היה מיותר.
			"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://..."]
		}
	]
}
תגובה:
{
	"ok"		: 4,  // כי כל ארבע הפעולות החזירו ok>0.
	"errors"	: 0,  // כי אף פעולה לא החזירה ok<0.
	"actionsCount"	: 4,
	"actions" : [
		{
			"a"	: "categoryCreate",
			"ok"	: 1
		},
		{
			"a"	: "repricingCreate",
			"ok"	: 1
		},
		{
			"a"	: "productCreate",
			"ok"	: 1
		},
		{
			"a"	: "productCreate",
			"ok"	: 1
		}
	]
}

◀ דוגמה 4 — מיזוג שתי קטגוריות בקטגוריה אחרת ומחיקת המקוריות
בקשה:
{
	"actions" : [
		{
			"a"			: "categoryCopy",
			"categoriesFrom"	: ["Original Category 1", "Original Category 2"],
			"deleteMode"		: "cat",
			// שימו לב: "removeMode":"cat" מיותר כי deleteMode ממילא ימחק את שתי הקטגוריות.
			"categoriesTo"		: ["A New Category"]
		}
}
תגובה:
{
	"ok"		: 1,  // כי פעולה אחת החזירה ok>0.
	"errors"	: 0,  // כי אף פעולה לא החזירה ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"			: "categoryCopy",
			"ok"			: 3,  // כי שלוש קטגוריות שונו: שתי המקוריות נמחקו וקטגוריית יעד אחת נוצרה.
			"categoriesCreated"	: 1,
			"categoriesDeleted"	: 2,
			"categoriesModified"	: 0,
			"productsCount"		: 123
		}
	]
}

◀ דוגמה 5 — שינוי המשתנה N וכיוון של כלל התראה
בקשה:
{
	"actions" : [
		{
			"a"		: "alertRuleEdit",
			"email"		: "john@example.net",
			"ruleNumber"	: 3,
			"rule"		: {
				"var_n"		: 1.5,
				"direction"	: "drop"
			}
		}
}
תגובה:
{
	"ok"		: 1,  // כי פעולה אחת החזירה ok>0.
	"errors"	: 0,  // כי אף פעולה לא החזירה ok<0.
	"actionsCount"	: 1,
	"actions" : [
		{
			"a"	: "alertRuleEdit",
			"ok"	: 2  // כי שני משתנים שונו בהצלחה.
		}
	]
}