אחרי שמקבלים מינוי, אפשר להשתמש במידע מהתגובה המוצלחת כדי לשנות את הסטטוס של המינוי או לעדכן את המינוי. בדף הזה מוסבר איך לאחזר ולעדכן מינוי.
אחזור מינוי
כדי לאחזר מינוי שהוזמן או הועבר בהצלחה, משתמשים בבקשת ה-HTTP הבאה GET:
GET https://reseller.googleapis.com/apps/reseller/v1/customers/CUSTOMER_ID/subscriptions/SUBSCRIPTION_ID
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
SUBSCRIPTION_ID: מזהה המינוי שייחודי לכל לקוח. אפשר לאחזר את הערך הזה באמצעות השיטה לאחזור כל המינויים של המפיץ.
לפעולה הזו אין פרמטרים בגוף הבקשה.
תשובה מוצלחת מחזירה קוד סטטוס HTTP 200 ואת הגדרות המינוי. בדוגמה הבאה של תגובה, המאפיין isInTrial הוא false אבל אין מאפיין trialEndTime, כלומר הלקוח הזה מעולם לא נהנה מתקופת ניסיון בחינם למשך 30 יום עם התוכנית הזו.
{
"kind": "reseller#subscription",
"customerId": "C0123456",
"subscriptionId": "123",
"skuId": "1010020028",
"billingMethod": "ONLINE",
"creationTime": "1331647980142",
"plan": {
"planName": "ANNUAL",
"isCommitmentPlan": true,
"commitmentInterval": {
"startTime": "1331647980142",
"endTime": "1363183980142"
}
},
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 10,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "RENEW_CURRENT_USERS_MONTHLY_PAY"
},
"purchaseOrderId": "example.com_annual_1",
"status": "ACTIVE",
"resourceUiUrl": "URL to customer's Subscriptions page in the Admin console",
"skuName": "Google Workspace Business Standard"
}
אחזור כל המינויים של לקוח
כדי לאחזר את כל המינויים של לקוח ספציפי של משווק שהוזמנו או הועברו בהצלחה, משתמשים בבקשת GET HTTP הבאה וכוללים את אסימון ההרשאה:
GET https://reseller.googleapis.com/apps/reseller/v1/subscriptions?customerId=CUSTOMER_ID&pageToken=START_DATE&maxResults=MAX_NUMBER
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
START_DATE: תאריך ההתחלה בפורמטYYYY-MM-DD. -
MAX_NUMBER: המספר המקסימלי של התוצאות שיוחזרו בדף תגובה.
לפעולה הזו אין פרמטרים בגוף הבקשה.
תגובה מוצלחת מחזירה קוד סטטוס 200 של HTTP ורשימה של המינויים וההגדרות של הלקוח. יכול להיות שרשימת המינויים תכלול מוצרים שלא מנוהלים בגרסה הזו של Reseller API.
אם אתם לא מנהלים את הלקוח, תוחזר שגיאה 403 Forbidden.
אחזור כל המינויים שניתנים להעברה של לקוח
כדי לאחזר את כל המינויים של לקוח שאפשר להעביר לניהול של המפיץ, משתמשים בבקשת ה-GET HTTP הבאה וכוללים את אסימון ההרשאה. השדה customerId הוא חובה
והוא המזהה הייחודי של הלקוח שמוחזר כשמאחזרים את החשבון של לקוח שמוכר לו שירותים.
customerAuthToken הוא טוקן העברה שהלקוח מספק והוא ספציפי למזהה המפיץ שלכם. אחרי שהלקוח יוצר את הטוקן, הוא תקף למשך 30 יום. מידע נוסף על האופן שבו הלקוחות יוצרים את האסימון זמין במאמר בנושא העברת חשבון Google Workspace למפיץ.
GET https://reseller.googleapis.com/apps/reseller/v1/subscriptions?customerId=CUSTOMER_ID&customerAuthToken=AUTH_TOKEN&pageToken=START_DATE&maxResults=MAX_NUMBER
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
AUTH_TOKEN: טוקן העברה שסופק על ידי הלקוח שלכם, שספציפי למזהה המפיץ שלכם. אחרי שהלקוח יוצר את הטוקן, הוא תקף למשך 30 יום. מידע נוסף על האופן שבו הלקוחות יוצרים את האסימון זמין במאמר העברת חשבון Google Workspace למפיץ. אם הערך הזה לא תקין או שתוקפו פג, בתשובת ה-API תופיע שגיאה403 Forbidden. -
START_DATE: תאריך ההתחלה בפורמטYYYY-MM-DD. -
MAX_NUMBER: המספר המקסימלי של התוצאות שיוחזרו בדף תגובה.
לפעולה הזו אין פרמטרים בגוף הבקשה.
תגובה מוצלחת מחזירה קוד סטטוס 200 של HTTP ורשימה של המינויים הניתנים להעברה של הלקוח, עם תאריך התפוגה של אסימון ההעברה והמספר המינימלי של מושבים שנדרשים בהזמנת ההעברה. יכול להיות שללקוח יש מינויים נוספים שלא ניתן להעביר.
{
"kind": "reseller#subscriptions",
"subscriptions": [
{
"kind": "subscriptions#subscription",
"customerId": "custId-6543",
"subscriptionId": "432",
"skuId": "1010020028",
"billingMethod": "ONLINE",
"creationTime": "1331647980142",
"plan": {
"planName": "ANNUAL",
"isCommitmentPlan": true,
"commitmentInterval": {
"startTime": "1331647980142",
"endTime": "1363183980142"
}
},
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 10,
"maximumNumberOfSeats": 500,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
},
"transferInfo": {
"transferabilityExpirationTime": "1333183980142",
"minimumTransferableSeats": "20"
},
"purchaseOrderId": "PO_890",
"status": "ACTIVE",
"resourceUiUrl": "URL to customer's Subscriptions page in the Admin console",
"skuName": "Google Workspace Business Standard"
},
{
"kind": "subscriptions#subscription",
"customerId": "custId-6543",
"subscriptionId": "140",
"skuId": "1010020028",
"creationTime": "1329389322728",
"plan": {
"planName": "FLEXIBLE",
"isCommitmentPlan": false
},
"seats": {
"kind": "subscriptions#seats",
"maximumNumberOfSeats": 50,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false,
"trialEndTime": "1331877480016"
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
},
"transferInfo": {
"transferabilityExpirationTime": "1333183780159",
"minimumTransferableSeats": "10"
},
"purchaseOrderId": "",
"status": "ACTIVE",
"resourceUiUrl": "URL to customer's Subscriptions page in the Admin console",
"skuName": "Google Workspace Business Standard"
},
],
"nextPageToken": "token"
}
אם אתם מתכננים להעביר את המינויים האלה באמצעות פעולת העברה בכמות גדולה,תצטרכו להעביר את כל המינויים. העברת מינויים אחד אחד גורמת לשגיאה. בנוסף, פעולת העברת המינויים בכמות גדולה מעבירה רק מינויים עם סטטוס ACTIVE. מידע נוסף זמין במאמר בנושא העברת מינוי.
אחזור כל המינויים של מפיץ
כדי לאחזר את כל המינויים שהוזמנו או הועברו בהצלחה על ידי משווק, משתמשים בבקשת ה-HTTP הבאה וכוללים את אסימון ההרשאה:GET
GET https://reseller.googleapis.com/apps/reseller/v1/subscriptions?customerNamePrefix=PREFIX&pageToken=TOKEN&maxResults=MAX_NUMBER
מחליפים את מה שכתוב בשדות הבאים:
-
PREFIX: תחילת השם של הלקוח שאת המינויים שלו אתם מחפשים. -
TOKEN: אסימון שמזהה דף ספציפי של תוצאות שהשרת צריך להחזיר. -
MAX_NUMBER: המספר המקסימלי של התוצאות שיוחזרו בדף תגובה.
הפעולה הזו יכולה להשתמש בהיקף הגישה לקריאה בלבד של OAuth. הפרמטרים customerNamePrefix, pageToken ו-maxResults הם מחרוזות שאילתה אופציונליות.
בדוגמה הבאה מאחזרים את כל המינויים של משווק ששייכים ללקוחות שהשם שלהם מתחיל ב-'exam':
GET https://reseller.googleapis.com/apps/reseller/v1/subscriptions?customerNamePrefix=exam
{
"kind": "reseller#subscriptions",
"subscriptions": [
{
"kind": "subscriptions#subscription",
"customerId": "C0123456",
"subscriptionId": "123",
"skuId": "1010020028",
"creationTime": "1331647980142",
"billingMethod": "ONLINE",
"plan": {
"planName": "ANNUAL",
"isCommitmentPlan": true,
"commitmentInterval": {
"startTime": "1331647980142",
"endTime": "1363183980142"
}
},
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 10,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
},
"purchaseOrderId": "PO_135",
"status": "ACTIVE",
"resourceUiUrl": "URL to customer's Subscriptions page in the Admin console",
"skuName": "Google Workspace Business Standard"
},
{
"kind": "subscriptions#subscription",
"customerId": "custId-5678",
"subscriptionId": "1404686",
"skuId": "1010020028",
"billingMethod": "ONLINE",
"creationTime": "1329389322728",
"plan": {
"planName": "FLEXIBLE",
"isCommitmentPlan": false
},
"seats": {
"kind": "subscriptions#seats",
"maximumNumberOfSeats": 50,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false,
"trialEndTime": "1331877480016"
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "AUTO_RENEW"
},
"purchaseOrderId": "",
"status": "ACTIVE",
"resourceUiUrl": "URL to customer's Subscriptions page in the Admin console",
"skuName": "Google Workspace Business Standard"
},
],
"nextPageToken": "token"
}
עדכון תוכנית מינויים
העדכון של תוכניות Google Workspace משתנה בהתאם לתוכנית. לפני שמעדכנים תוכנית, כדאי להביא בחשבון את הנקודות הבאות:
כשיוצרים מינוי והלקוח עומד בדרישות, התוכנית של המינוי יכולה להיות תקופת ניסיון של 30 יום. אפשר ליהנות מתקופת ניסיון בחינם למשך 30 יום גם בתוכנית הגמישה וגם בתוכנית השנתית. במהלך תקופת הניסיון, אפשר לשנות את תוכנית התמחור והתשלומים של המינוי לתוכנית גמישה או לתוכנית עם התחייבות שנתית כמה פעמים שצריך. אחרי שתקופת הניסיון מסתיימת והמינוי הופך למינוי פעיל, עדכון המינוי מתבצע לפי אותם הכללים שחלים על מינויים פעילים אחרים. כדי להפוך מינוי ניסיון למינוי פעיל באופן מיידי, צריך להתחיל מינוי בתשלום ממינוי ניסיון בחינם ל-30 יום. מידע נוסף על תקופת הניסיון למשך 30 יום ועל כללי הזכאות ללקוחות זמין במרכז העזרה לאדמינים.
אפשר לעדכן תוכנית גמישה לתוכנית מחויבות שנתית.
אי אפשר לעדכן תוכנית מחויבות שנתית.
לא כל התוכניות מתאימות לכל המוצרים. מידע נוסף על המוצרים שכלולים בתוכניות האלה זמין במאמר מוצרים ומק "טים.
כדי לעדכן מינוי לתוכנית גמישה או לניסיון למשך 30 יום ל
תוכנית עם התחייבות שנתית, משתמשים בבקשת ה-HTTP POSTהבאה:
POST https://reseller.googleapis.com/apps/reseller/v1/customers/CUSTOMER_ID/subscriptions/SUBSCRIPTION_ID/changePlan
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
SUBSCRIPTION_ID: מזהה המינוי שייחודי לכל לקוח. אפשר לאחזר את הערך הזה באמצעות השיטה לאחזור כל המינויים של מפיץ.
בדוגמה הבאה מעדכנים את המינוי עם הערך subscriptionId של 123. הערך בעמודה customerId הוא C0123456.
POST https://reseller.googleapis.com/apps/reseller/v1/customers/C0123456/subscriptions/123/changePlan
גוף הבקשה מכיל את הפרטים הבאים:
{
"kind": "reseller#changePlanRequest",
"planName": "ANNUAL_MONTHLY_PAY",
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 10
},
"purchaseOrderId": "123_March2012"
}
תשובה מוצלחת מחזירה קוד סטטוס 201 של HTTP ואת ההגדרות המעודכנות של תוכנית המינוי:
{
"kind": "reseller#subscription",
"customerId": "C0123456",
"subscriptionId": "123",
"skuId": "1010020028",
"creationTime": "1331647980142",
"plan": {
"planName": "ANNUAL",
"isCommitmentPlan": true,
"commitmentInterval": {
"startTime": "1331647980142",
"endTime": "1363183980142"
}
},
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 10,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
},
"purchaseOrderId": "123_March2012",
"status": "ACTIVE",
"skuName": "Google Workspace Business Standard"
}
עדכון מספר הרישיונות במינוי
כשמעדכנים מינוי לתוכנית עם התחייבות שנתית, משתמשים במאפייני מינוי שונים מאלה שמשמשים לעדכון מינוי לתוכנית גמישה של Google Workspace.
עדכון מספר הרישיונות במינוי לתוכנית שנתית
כדי לעדכן את הגדרות רישיונות המשתמש במינוי לתוכנית שנתית, משתמשים בבקשת ה-HTTP
הבאה:POST
POST https://reseller.googleapis.com/apps/reseller/v1/customers/CUSTOMER_ID/subscriptions/SUBSCRIPTION_ID/changeSeats
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
SUBSCRIPTION_ID: מזהה המינוי שייחודי לכל לקוח. אפשר לאחזר את הערך הזה באמצעות השיטה לאחזור כל המינויים של מפיץ.
בדוגמה הבאה המינוי מתעדכן עם הערך 123
subscriptionId. הערך בעמודה customerId הוא C0123456. גוף הבקשה
שונה בהתאם לסוג התוכנית:
POST https://reseller.googleapis.com/apps/reseller/v1/customers/C0123456/subscriptions/123/changeSeats
במינוי לתוכנית עם התחייבות שנתית ל-Google Workspace, גוף הבקשה הזה משמש לעדכון מספר רשיונות המשתמשים. הערך numberOfSeats הוא סכום כולל. לדוגמה, אם היו לכם בעבר 10 רישיונות למשתמשים ויש לכם הזמנה של לקוח ל-5 רישיונות חדשים, הערך הכולל בטקסט הבקשה של numberOfSeats יהיה 15, כמו בדוגמה הבאה:
{
"kind": "subscriptions#seats",
"numberOfSeats": 15
}
עדכון מספר הרישיונות במינוי לתוכנית גמישה
במינוי בתוכנית גמישה של Google Workspace, גוף הבקשה משמש לעדכון רישיונות המשתמשים. הערך maximumNumberOfSeats הוא הסכום של הרישיונות הקיימים והרישיונות החדשים. זה המספר המקסימלי של רישיונות משתמשים שאפשר להקצות לחשבון.
{
"kind": "subscriptions#seats",
"maximumNumberOfSeats": 15
}
תשובה מוצלחת מחזירה קוד סטטוס HTTP 201 ואת הגדרות הרישיון המעודכנות של המינוי:
{
"kind": "reseller#subscription",
"customerId": "C0123456",
"subscriptionId": "123",
"skuId": "1010020028",
"creationTime": "1331647980142",
"plan": {
"planName": "FLEXIBLE",
"isCommitmentPlan": false
},
"seats": {
"kind": "subscriptions#seats",
"maximumNumberOfSeats": 15,
"licensedNumberOfSeats": 10
},
"trialSettings": {
"isInTrial": false
},
"skuName": "Google Workspace Business Standard"
}
עדכון הגדרות החידוש של מינוי
כדי לעדכן את הגדרות החידוש של מינוי עם התחייבות שנתית, משתמשים בבקשת ה-HTTP הבאה:
POST
POST https://reseller.googleapis.com/apps/reseller/v1/customers/CUSTOMER_ID/subscriptions/SUBSCRIPTION_ID/changeRenewalSettings
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
SUBSCRIPTION_ID: מזהה המינוי שייחודי לכל לקוח. אפשר לאחזר את הערך הזה באמצעות השיטה לאחזור כל המינויים של מפיץ.
דוגמה לגוף הבקשה:
{
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
}
הערך של המאפיין renewalType יכול להיות כל אחת מהאפשרויות הבאות:
-
AUTO_RENEW_YEARLY_PAY: בסיום תקופת המינוי השנתי, המינוי יתחדש אוטומטית כמינויANNUAL_YEARLY_PAYעם אותםnumberOfSeats. -
AUTO_RENEW_MONTHLY_PAY: בסיום תקופת המינוי של תוכנית עם התחייבות שנתית, המינוי יתחדש אוטומטית כמינויANNUAL_MONTHLY_PAYעם אותםnumberOfSeats. -
RENEW_CURRENT_USERS_YEARLY_PAY: בסוף תקופת המינוי של תוכנית עם התחייבות שנתית, צריך לחדש את המינוי של התוכנית כפי שמופיע ב-ANNUAL_YEARLY_PAYאבל להשתמש במספר הכולל של רישיונות המשתמשים הפעילים הנוכחיים. זו הגדרת ברירת המחדל לתוכניות עם התחייבות שנתית פעילה (תשלום שנתי). -
RENEW_CURRENT_USERS_MONTHLY_PAY: בסוף תקופת המינוי של תוכנית עם התחייבות שנתית, צריך לחדש את המינוי של התוכנית כפי שמופיע ב-ANNUAL_MONTHLY_PAYאבל להשתמש במספר הכולל של רישיונות המשתמשים הפעילים הנוכחיים. זו הגדרת ברירת המחדל לתוכניות עם התחייבות שנתית פעילה (תשלום חודשי). -
RENEW_ON_PROPOSED_OFFER: בסוף המרווח של תוכנית ההתחייבות הנוכחית, החידוש יתבצע לפי הצעת החידוש האחרונה עם numberOfSeats כמספר הרישיונות הנוכחיים של המשתמשים הפעילים או ההתחייבות להצעה, לפי הגבוה מביניהם. -
SWITCH_TO_PAY_AS_YOU_GO: בסוף תקופת המינוי של תוכנית שנתית, אפשר לשנות את התוכנית השנתית לתוכנית גמישה. -
CANCEL: בסיום תקופת המינוי השנתית, המינוי מושעה. כדי להבין איך לבטל השעיה, אפשר לעיין במרכז העזרה לאדמינים.
תשובה מוצלחת מחזירה קוד סטטוס HTTP 201 ואת הגדרות החידוש המעודכנות של המינוי:
{
"kind": "reseller#subscription",
"customerId": "C0123456",
"subscriptionId": "123",
"skuId": "1010020028",
"creationTime": "1331647980142",
"plan": {
"planName": "ANNUAL",
"isCommitmentPlan": true,
"commitmentInterval": {
"startTime": "1331647980142",
"endTime": "1363183980142"
}
},
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 15,
"licensedNumberOfSeats": 15
},
"trialSettings": {
"isInTrial": false
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
},
"skuName": "Google Workspace Business Standard"
}
התחלת שימוש בשירות בתשלום ממינוי לתקופת ניסיון בחינם
כדי להעביר מינוי עם תקופת ניסיון בחינם למשך 30 יום למינוי לשירות בתשלום באופן מיידי, אם כבר הוגדרה תוכנית תשלומים למינוי עם תקופת הניסיון, משתמשים בבקשת ה-HTTP הבאה: POST
POST https://reseller.googleapis.com/apps/reseller/v1/customers/CUSTOMER_ID/subscriptions/SUBSCRIPTION_ID/startPaidService
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח. -
SUBSCRIPTION_ID: מזהה המינוי שייחודי לכל לקוח. אפשר לאחזר את הערך הזה באמצעות השיטה לאחזור כל המינויים של מפיץ.
בדוגמה הבאה, הערך C0123456 הוא customerId והערך 123 הוא subscriptionId:
POST https://reseller.googleapis.com/apps/reseller/v1/customers/C0123456/subscriptions/123/startPaidService
לפעולה הזו אין פרמטרים בגוף הבקשה.
תגובה מוצלחת מחזירה קוד סטטוס HTTP 201 ואת הגדרות המינוי המעודכנות:
{
"kind": "reseller#subscription",
"customerId": "C0123456",
"subscriptionId": "123",
"skuId": "1010020028",
"creationTime": "1331647980142",
"plan": {
"planName": "ANNUAL",
"isCommitmentPlan": true,
"commitmentInterval": {
"startTime": "1331647980142",
"endTime": "1363183980142"
}
},
"seats": {
"kind": "subscriptions#seats",
"numberOfSeats": 15,
"licensedNumberOfSeats": 15
},
"trialSettings": {
"isInTrial": false
},
"renewalSettings": {
"kind": "subscriptions#renewalSettings",
"renewalType": "SWITCH_TO_PAY_AS_YOU_GO"
},
"skuName": "Google Workspace Business Standard"
}
שדרוג או שדרוג לאחור של מינוי
אי אפשר לשנמך תוכניות שנתיות באמצע התקופה שלהן, ואי אפשר לתזמן שנמוך באמצעות הגדרות החידוש. מומלץ להגדיר את הגדרות החידוש כך שהמינוי ישודרג ל-FLEXIBLE ולאחר מכן יחזור לגרסה הקודמת אחרי מועד החידוש.
כדי לשדרג או לשנמך מינוי, צריך ליצור מינוי חדש עם
skuId שרוצים לשדרג או לשנמך אליו.
POST https://reseller.googleapis.com/apps/reseller/v1/customers/CUSTOMER_ID/subscriptions
מחליפים את מה שכתוב בשדות הבאים:
-
CUSTOMER_ID: שם הדומיין הראשי של הלקוח או המזהה הייחודי של הלקוח.
השיחה הזו תבטל את המינוי הקודם ותיצור מינוי חדש.
מידע נוסף על שדרוגים ושנמוגים זמין בדף Products & SKUs.