PriceWatchOpenAPI JSON

API למחירי מתחרים
לפי המק״ט שלכם.

הממשק מחזיר נתונים מנורמלים מרשתות השיווק בישראל ומספק Snapshot יומי שמתאים לעדכון שדות המחיר ב־iStores.

JSON עקבי Bearer API Key HMAC-SHA256

אימות

כל בקשה ל־API חייבת לכלול מפתח בכותרת Authorization. המפתח מוצג פעם אחת בלבד בעת יצירתו.

Request
curl "https://istores-price-intelligence.vercel.app/api/v1/prices?sku=7290001234567" \
  -H "Authorization: Bearer pw_live_••••••••"

אל תשמרו את המפתח בדפדפן.
הקריאה צריכה לצאת מהשרת של iStores או משירות Backend מורשה.

Endpoints

GET
/api/v1/prices?sku={sku}

השוואת מחיר נוכחית

מחזיר את המחירים הקיימים בכל רשת וסניף, מהזול ליקר.

GET
/api/v1/products/{sku}/prices

מוצר והיסטוריית מחירים

מחיר נוכחי יחד עם שינויים שנקלטו ב־90 הימים האחרונים.

GET
/api/v1/snapshots/{date}

Snapshot יומי

רשימה מדורגת של מק״טי הלקוח, עם cursor ו־changed_only לעדכון יעיל.

PUT
/api/v1/mappings

מיפוי קטלוג iStores

רישום או עדכון של עד 500 מק״טים, מזהי מוצר ושמות שדות יעד בבקשה אחת.

GET
/api/v1/mappings

רשימת מיפויים

מחזיר את המיפויים ומציין אילו מק״טים כבר נמצאו במאגר המחירים.

POST
/api/v1/webhooks

רישום Webhook

יוצר endpoint מאובטח ומחזיר secret חד־פעמי לאימות החתימות.

GET
/api/v1/webhooks

רשימת Webhooks

מחזיר את ה־endpoints של החשבון ללא הסודות המוצפנים.

POST
/api/v1/webhooks/test

בדיקת Webhook

מכניס אירוע בדיקה לתור המסירות ומחזיר delivery_id למעקב.

רישום מיפויי iStores

הערכים ב־field_mapping הם שמות שדות היעד שתפתחו ב־iStores. הם מוחזרים בכל שורת Snapshot לצד מזהה המוצר שלכם.

Upsert mappings
curl -X PUT "https://istores-price-intelligence.vercel.app/api/v1/mappings" \
  -H "Authorization: Bearer pw_live_••••••••" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"sku":"7290001234567","external_product_id":"prd_123","field_mapping":{"rami-levy":"competitor_price_rami_levy","shufersal":"competitor_price_shufersal"}}]}'

מבנה תשובה

200 OK
{
  "object": "price_list",
  "sku": "7290001234567",
  "count": 3,
  "data": [{
    "chain_slug": "rami-levy",
    "chain_name": "רמי לוי",
    "store_id": "001",
    "price": 16.9,
    "unit_price": 6.76,
    "source_updated_at": "2026-08-06T06:12:00Z",
    "collected_at": "2026-08-06T06:15:00Z"
  }]
}

אימות חתימת Webhook

רשמו endpoint דרך POST /api/v1/webhooks. ה־secret מוחזר פעם אחת בלבד. כל מסירה כוללת timestamp וחתימה.

Register endpoint
curl -X POST "https://istores-price-intelligence.vercel.app/api/v1/webhooks" \
  -H "Authorization: Bearer pw_live_••••••••" \
  -H "Content-Type: application/json" \
  -d '{"name":"iStores daily sync","url":"https://example.co.il/hooks/pricewatch"}'

לאימות המסירה, חשבו HMAC-SHA256 על המחרוזת {timestamp}.{raw_body} והשוו בזמן קבוע.

Node.js
import crypto from "node:crypto";

const signed = `${timestamp}.${rawBody}`;
const expected = "v1=" + crypto
  .createHmac("sha256", process.env.PRICEWATCH_WEBHOOK_SECRET)
  .update(signed)
  .digest("hex");

const valid = crypto.timingSafeEqual(
  Buffer.from(expected),
  Buffer.from(request.headers["x-pricewatch-signature"])
);

מדיניות ניסיונות חוזרים

במקרה של תשובה שאינה 2xx או timeout, המסירה נשלחת שוב לאחר 1, 5, 30, 120 ו־480 דקות. אחרי שישה ניסיונות היא מסומנת כ־dead ונשמרת לבדיקה.