API למפתחים · אינטגרציה ל-CRM / DMS · כלול בכל רישיון

נתוני השוק מיד2, ישר לתוך ה-DMS שלכם.

כל סריקה שסוכן שלכם עושה ביד2 נשמרת כ-JSON מלא - חציון לפי רמת גימור, פירוק שוק, וכל מודעה עם המחיר וההיסטוריה שלה. מערכת ה-CRM או ה-DMS שלכם מושכת את זה ב-REST פשוט, עם אותו מפתח רישיון של התוסף ובלי תוספת מחיר. אתם מתרגמים ומציגים איך שנוח לכם.

⬇ OpenAPI 3.0 spec אינטגרציה ב-4 שלבים ↓

אינטגרציה ב-4 שלבים

למפתח שכבר יש לו DMS/CRM - זה כל מה שצריך כדי לחבר:

  1. ייבאו את ה-spec. OpenAPI 3.0 - נכנס ישר ל-Postman / Swagger / Insomnia ומייצר client מוכן בשפה שלכם.
  2. שמרו את מפתח הרישיון של הסוכנות בקונפיג של המערכת שלכם. אותו מפתח של התוסף.
  3. מפו רכב ← מזהי יד2 פעם אחת עם GET /match (יצרן, דגם, שנה, מחיר) ← קבלו token, שמרו אותו על הרכב.
  4. משכו נתונים: GET /listing/{token} למחיר ומצב, או GET /market-data/latest לחציון השוק של הדגם. הציגו בטבלת המלאי שלכם.
בלי אינטגרציה בצד שלנו: אנחנו לא נכנסים ל-DMS שלכם ולא דורשים webhook. אתם מושכים GET מתי שנוח לכם (בטעינת מסך, ב-cron, בעדכון רכב). כל הדוגמאות למטה הן מהמימוש שרץ היום בסוכנות פעילה.

דוגמאות קוד - אותה קריאה, ארבע שפות

מחיר השוק של יונדאי טוסון (דגם 10291), עם מפתח הרישיון:

cURL

curl -H "Authorization: Bearer $KEY" \
  "https://api.amotors.co.il/api/v1/yad2/market-data/latest?manufacturer=21&model=10291&limit=1"

PHP (Laravel / Guzzle)

$res = Http::withToken($key)
    ->get('https://api.amotors.co.il/api/v1/yad2/market-data/latest', [
        'manufacturer' => '21', 'model' => '10291', 'limit' => 1,
    ]);
$med = $res->json('snapshots.0.med_price');

Node.js

const r = await fetch(
  'https://api.amotors.co.il/api/v1/yad2/market-data/latest?manufacturer=21&model=10291&limit=1',
  { headers: { Authorization: `Bearer ${key}` } });
const { snapshots } = await r.json();
const med = snapshots[0]?.med_price;

Python

import requests
r = requests.get(
    'https://api.amotors.co.il/api/v1/yad2/market-data/latest',
    params={'manufacturer': '21', 'model': '10291', 'limit': 1},
    headers={'Authorization': f'Bearer {key}'})
med = r.json()['snapshots'][0]['med_price']

איך זה עובד

שלושה חלקים, שניים מהם שלנו:

  1. התוסף - הסוכן גולש ביד2 כרגיל. כל סריקת דגם שמסתיימת נדחפת אוטומטית לשרת שלנו.
  2. השרת - שומר כל סריקה כ-snapshot, ממופתח לסוכנות שלכם לפי מפתח הרישיון. אף סוכנות לא רואה נתונים של אחרת.
  3. המערכת שלכם - קוראת את ה-snapshots ב-GET. עמודת "מול השוק" בטבלת המלאי, תג "מפורסם ביד2", התראת פער מחיר - כל מה שתרצו לבנות.
הסוכן גולש ביד2 ──► התוסף סורק ──► POST לשרת שלנו
                                        │
המערכת שלכם (CRM / BI / Sheets) ◄── GET ┘   Authorization: Bearer <licence-key>
עיקרון: אנחנו לא נכנסים למסד הנתונים שלכם ולא דורשים אינטגרציה בצד שלנו. אתם מושכים, מתרגמים ומציגים איך שנוח לכם. כל הדוגמאות למטה הן מהמימוש האמיתי שרץ היום במערכת CRM של סוכנות פעילה.

הזדהות ומגבלות

מהערך
כתובת בסיסhttps://api.amotors.co.il/api/v1/yad2
הזדהותAuthorization: Bearer <licence-key> - אותו מפתח שהתוסף משתמש בו
פורמטJSON בלבד. תאריכים ב-ISO-8601
קצב60 בקשות/דקה ברוב הנקודות · 120 ל-/listing, /match ו-/listing-details/known · 40 ל-/plate-lookup · 30 ל-/plate-learn ו-/agency-capture · 20 ל-/report. מעבר לזה - 429
שגיאות401 מפתח חסר/שגוי/פג · 429 חריגת קצב
X-Device-Idאל תשלחו אותה. הכותרת הזו שייכת לתוסף (קשירת דפדפנים למושבים). קריאה מהשרת שלכם בלי הכותרת אינה תופסת מושב, ובנקודות האינטגרציה (/market-data/latest, /listing, /match, /catalog, /resolve) גם אינה נבדקת מול המושבים. שאר הנקודות מיועדות לתוסף ואוכפות את הקשירה

נקודות הקצה

GET/market-data/latest60/דקה

הסריקות האחרונות של הסוכנות שלכם. זה ה-endpoint המרכזי - כל השאר נגזרות נוחות ממנו.

פרמטרמשמעות
manufacturer, modelמזהי יד2 של יצרן/דגם (ראו /catalog)
filter_urlלחלופין: כתובת סינון יד2 מדויקת
limitעד 50, ברירת מחדל 10
with_items=1לכלול גם את רשימת המודעות המלאה (כבד יותר)
# מחיר השוק של יונדאי טוסון (דגם 10291)
curl -H "Authorization: Bearer $KEY" \
  "https://api.amotors.co.il/api/v1/yad2/market-data/latest?manufacturer=21&model=10291&limit=1"
{
  "ok": true,
  "snapshots": [{
    "captured_at": "2026-08-12T12:28:10+03:00",
    "total": 102, "scanned": 102, "priced": 98,
    "avg_price": 94567, "med_price": 95000,
    "min_price": 70000, "max_price": 122000,
    "avg_hand": 2.4, "avg_days": 36,
    "dropped_count": 8, "dropped_avg_pct": 6,
    "mine_count": 3, "mine_avg_diff_pct": -4,
    "trims": [ { "k": "Elite 4X2 2.0", "count": 27, "avg": 101541, "med": 100000, ... } ]
  }]
}
GET/listing/{token}120/דקה

מצב מודעה בודדת - המחיר האחרון שנצפה והאם היא עוד באוויר. זה מה שמניע את התג "מפורסם ביד2" בטבלת המלאי.

{ "ok": true, "found": true, "token": "lzi0v0cf",
  "price": 102000, "live": true, "trim": "Elite 4X2 2.0",
  "seenAt": "2026-08-12T12:28:10+03:00",
  "url": "https://www.yad2.co.il/vehicles/item/lzi0v0cf" }
GET/match120/דקה

הצעת שידוך: איזו מודעה ביד2 היא כנראה הרכב הזה מהמלאי שלכם. מקבל manufacturer, model, trim, year, price ומחזיר את המודעה שלכם הקרובה ביותר במחיר מהסריקות האחרונות - עם diffPct לחיווי.

{ "ok": true, "suggestion": { "token": "lzi0v0cf", "price": 102000, "diffPct": 0 } }
GET/catalog60/דקה · ETag

קטלוג יצרנים ← דגמים עם מזהי יד2 (126 יצרנים, 616 דגמים). כמעט סטטי - כבדו את ה-ETag ותחסכו את המשיכה.

GET/license60/דקה

מצב הרישיון של המפתח הקורא - להצגת "מנוי פעיל עד..." אצלכם, ולזיהוי מוקדם של תפוגה.

{ "ok": true, "plan": "yearly", "capped": false,
  "expires_at": "2027-07-03T13:52:21+03:00", "days_left": 325 }
// כשלא תקין: { "ok": false, "reason": "expired" | "revoked" | "device_mismatch" | "invalid" }
GET/my-inventory60/דקה

סנכרון דו-כיווני: המלאי הפעיל של הסוכנות, מוצלב עם מצב הפרסום ביד2 - published (מקושר ובאוויר) / offline (מקושר, המודעה ירדה) / unlisted (לא מקושר) - כולל דגל פער מחיר בין ה-CRM למודעה. זה מה שמזין את פאנל "המלאי שלך" בתוסף. שימו לב: הנקודה נבדקת גם מול קשירת המכשירים - מרגע שמכשיר נקשר למפתח, קריאת שרת בלי X-Device-Id נדחית. מפתח של סוכנות אחרת מקבל 403.

פרמטרמשמעות
manufacturer, modelאופציונלי: צמצום לפלח (מזהי יד2) - למשל הדגם שנצפה כרגע
yearאופציונלי: שנתון מדויק
{ "ok": true, "agency": "...",
  "summary": { "total": 42, "published": 30, "offline": 4, "unlisted": 8, "mismatches": 2 },
  "vehicles": [{
    "id": 66, "brand": "יונדאי", "model": "טוסון", "trim": "Elite 4X2 2.0", "year": 2022,
    "yad2_manufacturer": "21", "yad2_model": "10291", "mileage": 61000,
    "crm_price": 102000, "token": "lzi0v0cf", "state": "published",
    "yad2_price": 104000, "mismatch": { "crm": 102000, "yad2": 104000, "diff": 2000 },
    "synced_at": "2026-08-12T12:28:10+03:00"
  }]
}
GET/wallet60/דקה

יתרת הקרדיטים לדוחות מפורטים. הארנק יושב על הרישיון הראשי - מפתח סוכן רואה (וצורך) את היתרה של ההורה שלו. גם כאן קשירת המכשירים נאכפת.

{ "ok": true, "credits": 12 }
POST/report20/דקה · בתשלום

מנכה קרדיט אחד מהארנק. דוח עומק לפלח: קורא ק"מ/בעלות/עלייה-לכביש מהמאגר הגלובלי, סורק את המודעות החסרות (עד 25 בסריקה), ומחזיר ממוצעים + פירוט פר-מודעה. חלון חסד: אותו פלח בתוך 24 שעות לא מחויב שוב (charged: false). אם לא הוחזר שום נתון - הקרדיט מוחזר אוטומטית.

שדה (JSON body)משמעות
tokensחובה. מערך מזהי מודעות, 1-400
manufacturer_id, model_idמזהה מספרי בודד לכל אחד. פלח רחב/חסר ← 422 עם reason: "segment_required" - לפני ניכוי הקרדיט
yearאופציונלי: שנתון הפלח
pricesאופציונלי: מפה token ← מחיר, להשלמת מחיר למודעות שנסרקות
{
  "ok": true, "balance": 11, "charged": true,
  "details": { "lzi0v0cf": { "km": 61000, "own": "פרטית", "ry": 2022, "rm": 3 } },
  "coverage": { "covered": 38, "from_db": 30, "scraped": 8, "total": 40, "capped": false },
  "aggregate": { "avg_km": 74500, "km_n": 35, "ownership": { "פרטית": 28, "ליסינג": 7 },
                 "avg_age_months": 38, "age_n": 33 }
}
// אין יתרה: 402 { "ok": false, "reason": "no_credits" }
// אין נתונים: 200 { "ok": false, "reason": "no_data", "balance": ... } - הקרדיט הוחזר
GET/plate-lookup40/דקה

לוחית רישוי ← יצרן/דגם/שנה במזהי הקטלוג של יד2, דרך משרד התחבורה. זה מה שממלא אוטומטית את שדות החיפוש בתוסף. פרמטר יחיד: ?plate=12345678. התשובה נשמרת במטמון שעה (Cache-Control: private). גם כאן קשירת המכשירים נאכפת.

{ "found": true, "plate": "12345678",
  "gov": { "manufacturer": "יונדאי", "model": "TUCSON", "year": 2022 },
  "manufacturer_id": 21, "manufacturer_name": "יונדאי",
  "model_id": 10291, "model_name": "טוסון", "year": 2022,
  "match": "full" }
// match: "full" | "manufacturer" (רק יצרן זוהה) | "none"
// לוחית לא קיימת: 200 { "found": false, "reason": "not_found" }
// gov.il לא זמין: 503 { "found": false, "reason": "gov_down" } - נסו שוב
POST/resolve60/דקה

טקסט חופשי של רכב ← מזהי יד2 + כתובת סינון מוכנה. שלחו יצרן/דגם/שנה כפי שהם רשומים אצלכם - בעברית או באנגלית - וקבלו קישור לפיד המסונן ביד2, בלי לנחש איך יד2 קורא לדגם. חסר מצב לגמרי; מתאים לכפתור "חיפוש ביד2" בתוך המערכת שלכם.

שדה (JSON body)משמעות
brandחובה. שם היצרן כפי שרשום אצלכם (עד 120 תווים)
modelאופציונלי: שם הדגם
yearאופציונלי: שנתון (1950-2100)
{ "ok": true,
  "url": "https://www.yad2.co.il/vehicles/cars?manufacturer=21&model=10291&year=2022-2022",
  "manufacturer_id": 21, "model_id": 10291, "year": "2022-2022",
  "matched": { "manufacturer": true, "model": true } }
// דגם שלא זוהה עדיין מחזיר קישור תקין ברמת היצרן - בדקו את matched.model
// יצרן לא זוהה: 200 { "ok": false, "reason": "manufacturer_not_matched", "message": "..." }
GET/extension-version60/דקה · ציבורי

מספר גרסת התוסף האחרונה שפורסמה - בלי הזדהות בכוונה (גם רישיון שפג צריך לדעת שיש עדכון, ואין כאן מידע מעבר למספר). נשמר במטמון שעה.

{ "version": "4.19.26" }
POST/market-dataהתוסף בלבד

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

GET/trackהתוסף בלבד

אין צורך לקרוא לזה - גיבוי שרתי למעקב "ימים במלאי" של התוסף לפי פילטר חיפוש (?filter_key= ← { ok, seen, sold }). קשירת המכשירים נאכפת תמיד, כולל בלי הכותרת - כך שקריאת שרת חיצונית ממילא נדחית.

POST/trackהתוסף בלבד

אין צורך לקרוא לזה - התוסף שומר כאן את מפת ה-seen/sold המלאה לכל פילטר (upsert, לא דלתא). אותה אכיפת מכשירים כמו ה-GET.

POST/plate-learnהתוסף בלבד

אין צורך לקרוא לזה - זיכרון קולקטיבי: התוסף מדווח הצלבת לוחית שהצליחה מקומית במקום שהשרת נכשל, ותיקון אחד משרת מיד את כל הסוכנים הבאים. מזהים שלא קיימים בקטלוג נדחים (הגנת poisoning).

POST/agency-captureהתוסף בלבד

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

POST/listing-detailsהתוסף בלבד

אין צורך לקרוא לזה - הדחיפה של נתוני העומק (ק"מ, בעלות, עלייה-לכביש) שהתוסף מחלץ מעמודי מודעה, אל המאגר הגלובלי שמזין את הדוח המפורט. גוף: items[] (עד 1,000) עם token חובה ו-km / ownership / on_road_year / on_road_month / price אופציונליים ← { ok, saved }.

POST/listing-details/knownהתוסף בלבד

אין צורך לקרוא לזה - עזר לתוסף: מתוך רשימת tokens (עד 3,000) מחזיר את אלה שכבר יש להם נתוני עומק טריים (maxAgeDays, ברירת מחדל 30), כדי לסרוק לעומק רק מודעות חדשות ← { ok, known }.

⇄ Sync API - מודיעין הרשת למערכת ה-CRM שלכם תוסף בתשלום

נקודות הקצה שלמעלה מחזירות את הסריקות של הסוכנות שלכם. ה-Sync API פותח שכבה אחרת לגמרי: הצילום העדכני ביותר של כל פלח מכל הרשת - כל סריקה של כל משתמש AMOTORS RADAR מזינה אותו - כולל עקומת מחיר↔זמן שנבנית גם ממכירות אמיתיות במעקב. שלוש קריאות GET, ומערכת ה-CRM שלכם מציגה על כל רכב במלאי את מחיר השוק ואת צפי הימים-למכירה.

דורש הפעלה על הרישיון (תוספת בתשלום - דברו איתנו). רישיון ללא ההרשאה מקבל 403 sync_not_enabled. ההזדהות זהה: Bearer של הרישיון, בלי X-Device-Id. שדות פנימיים של סוכנויות אחרות (סימוני "שלנו" וכד') לעולם אינם נחשפים.

GET/api/v1/sync/market120/דקה

תמונת השוק המלאה של פלח: מדדים, פילוח גימורים, שנתונים, עקומת מחיר↔זמן - מהסריקה הטרייה ביותר ברשת.

פרמטרמשמעות
manufacturer, modelחובה - מזהי יד2 (ראו /yad2/catalog)
yearחובה - שנתון בודד (מחירים מעורבי-שנתונים חסרי משמעות, ולכן כל פלח הוא דגם+שנה)
include=itemsלצרף את המודעות עצמן (כבד יותר)
curl -H "Authorization: Bearer $KEY" \
  "https://api.amotors.co.il/api/v1/sync/market?manufacturer=21&model=10291&year=2021"
{ "ok": true,
  "segment": { "manufacturer_id": 21, "model_id": 10291, "year_range": "2021-2021" },
  "scanned_at": "2026-08-27T18:26:00+03:00", "scan_age_days": 0,
  "market": { "listings_total": 99, "price_median": 95000, "price_avg": 94037,
              "avg_days_listed": 42, "dropped_count": 13, ... },
  "trims": [ ... ],
  "curve": { "base_price": 95000, "flat": false,
             "anchors": [ { "pct": -9, "price": 86500, "expected_days": 21 },
                          { "pct": 0,  "price": 95000, "expected_days": 35 },
                          { "pct": 9,  "price": 103600, "expected_days": 51 } ],
             "sample_listings": 103, "sample_sold": 15 } }
GET/api/v1/sync/estimate120/דקה

צפי ימים-למכירה למחיר נתון. הקריאה שכל CRM רוצה על כל שורת מלאי: "ב-92,000 ₪ - כמה זמן עד מכירה?"

curl -H "Authorization: Bearer $KEY" \
  "https://api.amotors.co.il/api/v1/sync/estimate?manufacturer=21&model=10291&year=2021&price=92000"
{ "ok": true, "price": 92000, "price_base": 95000, "diff_pct": -3,
  "expected_days": 31,
  "based_on": { "sample_listings": 103, "sample_sold": 15,
               "scanned_at": "2026-08-27T18:26:00+03:00" } }
GET/api/v1/sync/trend60/דקה

היסטוריית הפלח עד 180 יום - חציון, היצע וותק לאורך זמן + כיוון השינוי. מושלם לגרף מגמה בעמוד רכב.

{ "ok": true, "available": true,
  "points": [ { "date": "2026-08-06", "med": 60000, "supply": 61, "avg_days": 66 }, ... ],
  "change": { "pct": 0.1, "days": 17, "direction": "flat" },
  "curve": { ... } }

סכמת המודעה (items)

עם with_items=1 כל snapshot כולל את רשימת המודעות המלאה. אלה השדות של כל מודעה:

שדהמשמעות
tokenמזהה המודעה ביד2. url מצורף מוכן
priceהמחיר הנוכחי בש"ח, או null
prevPrice, dropPctמחיר קודם ואחוז הירידה - כשהמוכר הוריד מחיר
handיד (מספר בעלים)
yearשנתון
trimרמת הגימור המנורמלת - המפתח להשוואת מחיר הוגנת
daysListed, staleותק המודעה בימים, ודגל "תקועה" (180+ יום)
dealScorehot / good / mid / cold - הערכת מהירות מכירה
bouncedDaysAgoאם המודעה הוסרה וחזרה - לפני כמה ימים
ourstrue כשהמודעה שייכת לסוכנות שלכם (לפי שם הסוכנות במודעה)

מתכונים - מה לבנות עם זה

כל אחד מאלה רץ היום בפרודקשן במערכת ה-CRM של סוכנות פעילה. סדר לפי תמורה-לשעת-פיתוח:

1 · תג "מפורסם ביד2" על כל רכב במלאי (שעה-שעתיים)

זה תופס מחיר שעודכן במערכת ונשכח ביד2 - הטעות הכי יקרה בפרסום מלאי.

2 · עמודת "מול השוק" (שעה)

3 · התראות הזדמנות (בוקר אחד)

4 · חיווי מנוי (רבע שעה)

כלול. לא תוספת.

רישיון אחד = התוסף + ה-API + האזור האישי. 49 ש"ח לחודש למשתמש, שנתי 490 ש"ח (חודשיים מתנה), סוכן נוסף 290 ש"ח לשנה. המפתח מגיע במייל תוך דקות מהרכישה, וה-API עובד איתו מיד.

← לרכישת רישיון · שאלות אינטגרציה? [email protected]