נתיבי המוצרים

נתיבים לחיפוש מוצרים, שליפת מחירים לפי ברקוד ושם, חיפוש בתוך סניף ספציפי, וניהול קבוצות מוצרים. קבוצות מוצרים מאפשרות להתמודד עם הבדלי ברקוד בין רשתות לאותו מוצר.

GET/products

חיפוש מוצרים בכל הרשתות לפי שם חופשי. המערכת מריצה חיפוש בשלושה מעברים: התאמה מלאה לביטוי, כל המילים, לפחות מילה אחת — ומדרגת לפי רלוונטיות. מחזיר bestMatch ורשימה מדורגת.

Query params

כולם אופציונליים. ללא q מוחזרים כל המוצרים עם pagination.

פרמטרים

שדהסוגנדרשתיאור
qמחרוזתלאחיפוש חופשי בשם מוצר.
pageמספרלאמספר עמוד. ברירת מחדל: 1.
limitמספרלאתוצאות לעמוד. ברירת מחדל: 20.

דוגמת בקשה

curl "https://api.priceil.dev/products?q=חלב&limit=5"

דוגמת תשובה (data)

{
  "bestMatch": {
    "itemCode": "7290000123456",
    "itemName": "חלב תנובה 1L",
    "itemType": 1,
    "manufacturerName": "תנובה",
    "quantity": "1.000",
    "isWeighted": false,
    "unitOfMeasure": "100 מל"
  },
  "allOthers": [
    { "itemCode": "7290000054321", "itemName": "חלב תנובה 3% 500ml", "..." : "..." }
  ],
  "total": 342,
  "page": 1,
  "limit": 5
}

נסו בעצמכם

GET?

שדות תגובה

שדהסוגתיאור
itemCodeמחרוזתברקוד המוצר (מזהה ייחודי).
itemNameמחרוזתשם המוצר.
itemTypeמספרקוד סוג המוצר.
manufacturerNameמחרוזתשם היצרן.
manufactureCountryמחרוזתארץ ייצור.
manufacturerDescriptionמחרוזתתיאור היצרן.
unitQtyמחרוזתתווית כמות יחידה.
quantityמחרוזת (עשרוני)כמות באריזה.
isWeightedבוליאניהאם המוצר נמכר לפי משקל.
unitOfMeasureמחרוזתיחידת מידה.
qtyInPackageמספריחידות באריזה.

שגיאות נפוצות

סטטוסמשמעותפעולה מומלצת
400פרמטר page/limit לא תקיןולידציה בצד לקוח לפני שליחה.
429חריגה ממגבלת קצבretry עם backoff אקספוננציאלי.
500שגיאת שרתנסו שוב מאוחר יותר.
GET/products/search

חיפוש מוצרים בתוך סניף ספציפי. כל תוצאה כוללת את מחיר המוצר בסניף שנבחר. storeId הוא פרמטר חובה.

פרמטרים

שדהסוגנדרשתיאור
qמחרוזתלאחיפוש חופשי בשם מוצר.
storeIdמספרכןמזהה פנימי של הסניף (חובה).
pageמספרלאמספר עמוד. ברירת מחדל: 1.
limitמספרלאתוצאות לעמוד. ברירת מחדל: 20.

דוגמת בקשה

curl "https://api.priceil.dev/products/search?q=חלב&storeId=12&limit=5"

דוגמת תשובה (data)

{
  "items": [
    {
      "itemCode": "7290000051352",
      "itemName": "חלב תנובה 3% 1L",
      "price": "5.90",
      "priceUpdateDate": "2026-03-20T00:00:00.000Z",
      "storeId": 12,
      "storeName": "רמי לוי",
      "city": "תל אביב",
      "address": "רחוב הרצל 1",
      "chain": "רמי לוי שיווק השקמה"
    }
  ],
  "total": 15,
  "page": 1,
  "limit": 5
}

נסו בעצמכם

GET?

שגיאות נפוצות

סטטוסמשמעותפעולה מומלצת
400storeId חסר או לא תקיןודאו שstoreId מספרי ונשלח.
404סניף לא נמצאבדקו שה-storeId קיים.
429חריגה ממגבלת קצבretry עם backoff.
GET/products/:barcode

שליפת מוצר יחיד לפי ברקוד (itemCode). מחזיר את פרטי המוצר בלבד, ללא מחירים. לשליפת מחירים השתמשו ב-/products/:barcode/prices.

דוגמת בקשה

curl "https://api.priceil.dev/products/7290000051352"

דוגמת תשובה (data)

{
  "itemCode": "7290000051352",
  "itemName": "חלב תנובה 3% 1L",
  "itemType": 1,
  "manufacturerName": "תנובה",
  "manufactureCountry": "IL",
  "manufacturerDescription": "תנובה מרכז שיתופי",
  "unitQty": "ליטר",
  "quantity": "1.000",
  "isWeighted": false,
  "unitOfMeasure": "100 מל",
  "qtyInPackage": 1
}

נסו בעצמכם

GET

שגיאות נפוצות

סטטוסמשמעותפעולה מומלצת
404ברקוד לא נמצאבדקו את הברקוד.
429חריגה ממגבלת קצבretry עם backoff.
GET/products/:barcode/prices

מחזיר מוצר עם מחיריו בכל החנויות שנושאות אותו, ממויין מהזול לאחרון. זהו הנתיב המרכזי לבניית מסך השוואת מחירים.

דוגמת בקשה

curl "https://api.priceil.dev/products/7290000051352/prices"

דוגמת תשובה (data)

{
  "product": { "itemCode": "7290000051352", "itemName": "חלב תנובה 3% 1L", "..." : "..." },
  "prices": [
    {
      "price": "5.90",
      "priceUpdateDate": "2026-03-20T00:00:00.000Z",
      "storeId": 12,
      "storeName": "רמי לוי",
      "city": "תל אביב",
      "chain": "רמי לוי שיווק השקמה"
    },
    {
      "price": "6.40",
      "storeId": 34,
      "storeName": "שופרסל דיל",
      "city": "רמת גן",
      "chain": "שופרסל"
    }
  ]
}

prices ממויין לפי price עולה — הזול ביותר ראשון.

נסו בעצמכם

GET

שגיאות נפוצות

סטטוסמשמעותפעולה מומלצת
404ברקוד לא נמצאבדקו את הברקוד.
429חריגה ממגבלת קצבretry עם backoff.
GET/products/:barcode/prices/:storeId

מחיר מוצר ספציפי בסניף ספציפי. מחזיר 404 גם אם הסניף קיים אבל לא נושא את המוצר.

דוגמת בקשה

curl "https://api.priceil.dev/products/7290000051352/prices/12"

דוגמת תשובה (data)

{
  "price": "5.90",
  "priceUpdateDate": "2026-03-20T00:00:00.000Z",
  "storeId": 12,
  "storeName": "רמי לוי",
  "city": "תל אביב",
  "address": "רחוב הרצל 1",
  "chain": "רמי לוי שיווק השקמה"
}

נסו בעצמכם

GET

שגיאות נפוצות

סטטוסמשמעותפעולה מומלצת
404ברקוד / סניף לא נמצא, או הסניף לא נושא מוצר זההציגו fallback מתאים.
429חריגה ממגבלת קצבretry עם backoff.

קבוצות מוצרים

קבוצות מנרמלות ברקודים שונים מרשתות שונות לאותו מוצר. כשבונים רשימת קניות — עדיף לשמור groupId ולא ברקוד ספציפי, כי ה-API ימצא את הברקוד הנכון לכל סניף בעצמו.

GET/products/groups

חיפוש קבוצות מוצרים לפי שם. כל קבוצה כוללת את הברקודים המשויכים לה. מחזיר אותה מבנה bestMatch/allOthers כמו /products.

פרמטרים

שדהסוגנדרשתיאור
qמחרוזתלאחיפוש בשם הקבוצה.
pageמספרלאמספר עמוד. ברירת מחדל: 1.
limitמספרלאתוצאות לעמוד. ברירת מחדל: 20.

דוגמת בקשה

curl "https://api.priceil.dev/products/groups?q=חלב תנובה&limit=5"

נסו בעצמכם

GET?
GET/products/groups/:id/prices/:storeId

המחיר הזול ביותר לקבוצת מוצרים בסניף ספציפי. ה-API בוחר את הברקוד הנכון שהסניף נושא מתוך כל הברקודים בקבוצה.

דוגמת בקשה

curl "https://api.priceil.dev/products/groups/42/prices/12"

דוגמת תשובה (data)

{
  "groupId": 42,
  "groupName": "חלב תנובה 3% 1L",
  "itemCode": "7290000042015",
  "itemName": "חלב תנובה 3% 1L",
  "price": "5.90",
  "priceUpdateDate": "2026-03-20T00:00:00.000Z",
  "storeId": 12,
  "storeName": "רמי לוי",
  "city": "תל אביב",
  "chain": "רמי לוי שיווק השקמה"
}

נסו בעצמכם

GET

שדות תגובה

שדהסוגתיאור
groupIdמספרמזהה קבוצת המוצרים.
groupNameמחרוזתשם הקבוצה המנורמל.
itemCodeמחרוזתהברקוד הספציפי שהסניף נושא.
itemNameמחרוזתשם המוצר כפי שמופיע ברשת.
priceמחרוזת (עשרוני)המחיר הזמין בסניף בשקלים.
priceUpdateDateמחרוזת (תאריך)תאריך עדכון המחיר האחרון.
storeIdמספרמזהה פנימי של הסניף.
storeNameמחרוזתשם הסניף.
cityמחרוזתעיר הסניף.
addressמחרוזתכתובת הסניף.
chainמחרוזתשם הרשת.

שגיאות נפוצות

סטטוסמשמעותפעולה מומלצת
404קבוצה / סניף לא נמצאו, או הסניף לא נושא אף ברקוד מהקבוצההציגו fallback מתאים.
429חריגה ממגבלת קצבretry עם backoff.

טיפים לשימוש

  • לחיפוש ראשוני בלי סניף — השתמשו ב-/products?q=...לאיסוף ברקודים, ואז העבירו אותם ל-/products/:barcode/pricesלבניית השוואה.
  • לרשימות קניות — עדיף לשמור groupId ולא ברקוד, כי קבוצות עובדות על פני כל הרשתות. השתמשו בנתיב /products/groups/:id/prices/:storeId לקבלת מחיר מדויק לכל סניף.
  • isWeighted=true מציין מוצר שנמכר לפי משקל. מחירו יהיה ל-100 גרם ולא ליחידה.
  • priceUpdateDate הוא תאריך העדכון האחרון שהרשת דיווחה לממשלה, לא תאריך העדכון במסד הנתונים שלנו.
  • לשילוב עם סניפים: קראו ל-/storesקודם לאיסוף storeId, ואז השתמשו בו בנתיבי המחיר.