דלג לתוכן הראשי

E-Commerce API

ניהול קטלוג המוצרים שלך, מעקב אחר הזמנות, ניטור פעילות עגלות וניתוח פלחי לקוחות RFM.

כל נקודות הקצה בעמוד זה יחסיות לכתובת הבסיס: https://api-eu1.joryio.com - ראו סקירת API.

מוסכמת שמות מזהים

Joryio משתמש במוסכמת שמות ברורה למזהים:

המזהים שלך (השתמש בהם בעת יצירה/מעקב של נתונים)

שדהתיאורדוגמה
productIdמזהה המוצר שלך (מק"ט, מזהה מוצר מהפלטפורמה שלך)"SKU-12345"
orderIdמזהה ההזמנה שלך (מספר הזמנה מהפלטפורמה שלך)"ORD-2024-001"
userIdמזהה המשתמש שלך"user-123"

מזהי Joryio (מוחזרים בתגובות API)

שדהתיאורמתי להשתמש
idהמזהה הפנימי של Joryio למוצרים/הזמנותמוחזר בתגובות API, השתמש לעדכונים/מחיקות
joryioUserIdמזהה משתמש פנימי של Joryio (ה-id בן 24 התווים המוחזר בתגובות ה-API של משתמשים)חלופה ל-userId כאשר רוצים להתייחס למזהה של Joryio

זיהוי משתמשים גמיש

בעת יצירת הזמנות או מעקב אחר אירועים, ניתן לזהות משתמשים באמצעות אחד מהבאים:

  • userId - מזהה המשתמש שלך (הנפוץ ביותר)
  • joryioUserId - מזהה משתמש פנימי של Joryio
// Using your user ID (recommended)
{ "orderId": "ORD-001", "userId": "user-123", ... }

// Using Joryio's internal user ID
{ "orderId": "ORD-001", "joryioUserId": "66a1f2c3d4e5f6a7b8c9d0e1", ... }

אימות

כל הבקשות דורשות אימות JWT:

Authorization: Bearer your_jwt_token
Content-Type: application/json
X-Workspace-Id: your_workspace_id

קטלוג מוצרים

יצירת מוצר

יצירת מוצר חדש בקטלוג.

POST /catalog/products

גוף הבקשה:

שדהסוגחובהתיאור
productIdstringכןמזהה המוצר הייחודי שלך (מק"ט, מזהה מוצר)
namestringכןשם המוצר
pricenumberכןמחיר המוצר
descriptionstringלאתיאור המוצר
compareAtPricenumberלאמחיר מקורי (להנחות)
currencystringלאקוד מטבע (ברירת מחדל: USD)
categoriesstring[]לאקטגוריות המוצר
tagsstring[]לאתגיות המוצר
brandstringלאשם המותג
imageUrlstringלאכתובת תמונה ראשית
urlstringלאכתובת דף המוצר
inStockbooleanלאזמינות במלאי (ברירת מחדל: true)
skustringלאמק"ט
variantsobject[]לאוריאנטים של המוצר
customFieldsobjectלאשדות מותאמים אישית

דוגמת בקשה:

curl -X POST https://api-eu1.joryio.com/catalog/products \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"productId": "SKU-12345",
"name": "Classic Blue T-Shirt",
"price": 29.99,
"compareAtPrice": 39.99,
"currency": "USD",
"categories": ["Clothing", "T-Shirts"],
"tags": ["sale", "bestseller"],
"brand": "Acme Apparel",
"imageUrl": "https://example.com/images/blue-tshirt.jpg",
"url": "https://example.com/products/blue-tshirt",
"inStock": true,
"sku": "BTS-001-BL",
"variants": [
{
"id": "var-s",
"name": "Small",
"sku": "BTS-001-BL-S",
"price": 29.99,
"inStock": true,
"options": { "size": "S", "color": "Blue" }
},
{
"id": "var-m",
"name": "Medium",
"sku": "BTS-001-BL-M",
"price": 29.99,
"inStock": true,
"options": { "size": "M", "color": "Blue" }
}
]
}'

תגובה:

{
"id": "prod_abc123",
"productId": "SKU-12345",
"name": "Classic Blue T-Shirt",
"price": 29.99,
"createdAt": "2024-01-20T10:00:00.000Z"
}

יצירה או עדכון של מוצרים בכמות גדולה (array body)

אין נקודת קצה נפרדת לפעולה באצווה: POST /catalog/products מקבל או אובייקט מוצר יחיד או מערך JSON חשוף של אובייקטי מוצר (ללא אובייקט עוטף). צורת המערך יוצרת או מעדכנת עד 500 מוצרים בבקשה אחת, לפי productId.

POST /catalog/products

גוף הבקשה:

מערך JSON (עד 500 איברים; מערך ריק או יותר מ־500 מחזיר 400). כל איבר באותו פורמט כמו הצורה של אובייקט בודד, כולל שדה source אופציונלי לכל מוצר.

כל איבר עובר תיקוף מלא. איבר לא תקין מדווח ב־failed לפי האינדקס שלו במערך - הוא לעולם אינו מתקבל ללא התראה - ושאר האיברים התקינים עדיין נכתבים.

[
{ "productId": "SKU-001", "name": "Product 1", "price": 19.99 },
{ "productId": "SKU-002", "name": "Product 2", "price": 29.99, "source": "shopify" }
]

תגובה:

בשונה מצורת האובייקט (שמחזירה את המוצר שנוצר), צורת המערך מחזירה סיכום מצרפי:

{
"processed": 2,
"upserted": 2,
"failed": []
}
שדהתיאור
processedמספר האיברים שהתקבלו במערך הבקשה
upsertedמוצרים שנוצרו או עודכנו בפועל
failedכשלים לכל איבר: index (מיקום במערך הבקשה), productId / sku (כשקיימים על האיבר), reason

רשימת מוצרים

שאילתת מוצרים עם סינון ודפדוף.

GET /catalog/products

פרמטרי שאילתה:

פרמטרסוגתיאור
searchstringחיפוש לפי שם, תיאור או מק"ט
categoriesstring[]סינון לפי קטגוריות
tagsstring[]סינון לפי תגיות
brandstringסינון לפי מותג
inStockbooleanסינון לפי זמינות במלאי
minPricenumberמחיר מינימלי
maxPricenumberמחיר מקסימלי
limitnumberתוצאות לעמוד (ברירת מחדל: 50)
offsetnumberהיסט לדפדוף
sortBystringשדה מיון: name, price, createdAt, updatedAt
sortOrderstringasc או desc

דוגמה:

curl "https://api-eu1.joryio.com/catalog/products?categories=T-Shirts&inStock=true&limit=20" \
-H "Authorization: Bearer $TOKEN"

קבלת קטגוריות

רשימת כל קטגוריות המוצרים.

GET /catalog/categories

קבלת מותגים

רשימת כל מותגי המוצרים.

GET /catalog/brands

סטטיסטיקות קטלוג

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

GET /catalog/stats

תגובה:

{
"productCount": 8214,
"categoryCount": 37,
"brandCount": 12,
"outOfStockCount": 341,
"lowStockCount": 96,
"unclassifiedCount": 18,
"lowStockThreshold": 10
}
שדהתיאור
outOfStockCountמוצרים עם quantity 0, או inStock: false כשאין מעקב כמות
lowStockCountמוצרים עם quantity בין 1 ל-lowStockThreshold
unclassifiedCountמוצרים ללא קטגוריה או ללא מותג
lowStockThresholdסף היחידות שלפיו חושב lowStockCount

הזמנות

יצירת הזמנה

מעקב אחר הזמנה חדשה.

POST /orders

גוף הבקשה:

שדהסוגחובהתיאור
orderIdstringכןמזהה ההזמנה שלך (מספר הזמנה מהפלטפורמה שלך)
userIdstringאחד מהשנייםמזהה המשתמש של הלקוח שלך
joryioUserIdstringאחד מהשנייםמזהה משתמש פנימי של Joryio (חלופה ל-userId)
totalnumberכןסכום ההזמנה הכולל
itemsobject[]כןפריטים בהזמנה
statusstringלאסטטוס הזמנה (ברירת מחדל: pending)
currencystringלאקוד מטבע
subtotalnumberלאסכום ביניים לפני הנחות
discountnumberלאסכום הנחה
shippingnumberלאעלות משלוח
taxnumberלאסכום מס
totalRefundednumberלאהסכום שהוחזר עד כה, במטבע ההזמנה (ברירת מחדל 0). להחזר חלקי שלחו את הסכום החלקי עם status: partiallyRefunded; להחזר מלא הגדירו אותו ל-total עם status: refunded. החזרים מקוזזים מההכנסה המיוחסת.
couponCodestringלאקופון שהופעל
shippingAddressobjectלאכתובת משלוח
campaignIdstringלאקמפיין ייחוס
canvasIdstringלאמסע הייחוס
sourcestringלאמקור ההזמנה (email, sms, direct)
utmSourcestringלאמקור UTM
utmMediumstringלאמדיום UTM
utmCampaignstringלאקמפיין UTM
זיהוי משתמשים

יש לספק userId או joryioUserId. השתמש ב-userId עם מזהי המשתמשים שלך (הנפוץ ביותר). השתמש ב-joryioUserId כאשר יש לך את מזהה המשתמש הפנימי של Joryio (ה-id בן 24 התווים המוחזר בתגובות ה-API).

מבנה פריט:

{
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"sku": "BTS-001",
"quantity": 2,
"price": 29.99,
"total": 59.98,
"imageUrl": "https://example.com/image.jpg"
}

דוגמת בקשה:

curl -X POST https://api-eu1.joryio.com/orders \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"orderId": "ORD-2024-001",
"userId": "user-123",
"total": 89.97,
"subtotal": 99.97,
"discount": 10.00,
"shipping": 5.99,
"tax": 4.99,
"currency": "USD",
"couponCode": "SAVE10",
"items": [
{
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"quantity": 2,
"price": 29.99,
"total": 59.98
},
{
"productId": "prod_def456",
"name": "Black Jeans",
"quantity": 1,
"price": 49.99,
"total": 49.99
}
],
"source": "email",
"campaignId": "camp_xyz789"
}'

סימון הזמנה כנשלחה

סימון הזמנה כנשלחה.

POST /orders/:id/fulfill

גוף הבקשה:

{
"trackingNumber": "1Z999AA10123456784",
"carrier": "UPS"
}

ביטול הזמנה

ביטול הזמנה.

POST /orders/:id/cancel

גוף הבקשה:

{
"reason": "Customer requested cancellation"
}

החזר כספי להזמנה

עיבוד החזר כספי.

POST /orders/:id/refund

גוף הבקשה:

{
"refundAmount": 29.99,
"reason": "Product defective",
"partial": true
}

סטטיסטיקות הזמנות

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

GET /orders/stats?startDate=2024-01-01&endDate=2024-01-31

תגובה:

{
"totalOrders": 156,
"totalRevenue": 12450.50,
"averageOrderValue": 79.81,
"ordersByStatus": {
"pending": 5,
"processing": 12,
"shipped": 45,
"delivered": 90,
"cancelled": 4
}
}

מעקב עגלות

עדכון עגלה

מעקב או עדכון עגלת משתמש.

PUT /carts

גוף הבקשה:

{
"userId": "user_123",
"items": [
{
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"price": 29.99,
"quantity": 2,
"total": 59.98,
"imageUrl": "https://example.com/image.jpg"
}
],
"value": 59.98,
"currency": "USD",
"checkoutUrl": "https://store.example.com/checkout?cart=abc123"
}

הוספה לעגלה

הוספת פריט לעגלת משתמש.

POST /carts/add

גוף הבקשה:

{
"userId": "user_123",
"item": {
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"price": 29.99,
"quantity": 1,
"total": 29.99
}
}

קבלת עגלות נטושות

רשימת עגלות נטושות לקמפיינים של שחזור.

GET /carts/abandoned

פרמטרי שאילתה:

פרמטרסוגתיאור
minValuenumberערך עגלה מינימלי
abandonedMinutesAgonumberמספר הדקות המרבי מאז הנטישה
limitnumberתוצאות לעמוד
offsetnumberהיסט לדפדוף

תגובה:

{
"data": [
{
"id": "cart_123",
"userId": "user_456",
"items": [...],
"value": 149.99,
"abandonedAt": "2024-01-20T15:30:00.000Z",
"checkoutUrl": "https://store.example.com/checkout?cart=abc"
}
],
"total": 42,
"hasMore": true
}

סטטיסטיקות עגלות

קבלת סטטיסטיקות עגלות ונטישה.

GET /carts/stats

תגובה:

{
"totalCarts": 1250,
"abandonedCarts": 312,
"recoveredCarts": 87,
"totalAbandonedValue": 45670.50,
"recoveryRate": 27.88
}

ניתוח RFM

ניתוח RFM (עדכניות, תדירות, ערך כספי) מפלח לקוחות על סמך התנהגות רכישה.

קבלת נתוני RFM של משתמש

קבלת ציוני RFM ופלח עבור משתמש ספציפי.

GET /rfm/user/:userId

תגובה:

{
"totalOrders": 12,
"totalSpent": 849.50,
"averageOrderValue": 70.79,
"firstOrderDate": "2023-06-15T10:00:00.000Z",
"lastOrderDate": "2024-01-18T14:30:00.000Z",
"daysSinceLastOrder": 2,
"hasActiveCart": false,
"rfmRecency": 5,
"rfmFrequency": 4,
"rfmMonetary": 4,
"rfmScore": "544",
"rfmSegment": "champions"
}

קבלת התפלגות RFM

קבלת התפלגות לקוחות על פני פלחי RFM.

GET /rfm/distribution

תגובה:

{
"champions": { "count": 150, "totalValue": 125000 },
"loyal": { "count": 320, "totalValue": 89000 },
"potential_loyalists": { "count": 180, "totalValue": 32000 },
"new_customers": { "count": 450, "totalValue": 28000 },
"at_risk": { "count": 95, "totalValue": 42000 },
"lost": { "count": 280, "totalValue": 15000 }
}

פלחי RFM

פלחתיאורציוני RFM אופייניים
Champions (אלופים)הלקוחות הטובים ביותר, קונים לעיתים קרובות, מוציאים הכי הרבה555, 554, 545
Loyal (נאמנים)לקוחות עקביים444, 443, 434
Potential Loyalists (נאמנים פוטנציאליים)לקוחות אחרונים עם תדירות ממוצעת433, 343, 333
New Customers (לקוחות חדשים)רק ביצעו רכישה ראשונה511, 512, 411
Promising (מבטיחים)אחרונים אך תדירות נמוכה422, 322, 312
Needs Attention (דורשים תשומת לב)ממוצעים, מעורבות יורדת332, 322, 233
About to Sleep (עומדים להירדם)מתחת לממוצע, בסיכון211, 212, 221
At Risk (בסיכון)היו נאמנים, לא קנו לאחרונה144, 143, 244
Can't Lose (אסור לאבד)היו הלקוחות הטובים ביותר, כעת לא פעילים155, 154, 255
Hibernating (במצב שינה)מעורבות נמוכה, לא פעילים זמן רב122, 121, 112
Lost (אבודים)ציונים נמוכים ביותר, כנראה נטשו111

Webhooks

אירועי מסחר אלקטרוני שולחים Webhooks שיכולים להפעיל מסעות:

אירועתיאור
ecommerce.order.createdהזמנה חדשה בוצעה
ecommerce.order.fulfilledהזמנה נשלחה
ecommerce.order.cancelledהזמנה בוטלה
ecommerce.order.refundedהזמנה הוחזרה
ecommerce.order.status_changedסטטוס הזמנה השתנה
ecommerce.cart.abandonedעגלה סומנה כנטושה
ecommerce.cart.recoveredעגלה נטושה שוחזרה
ecommerce.cart.updatedתוכן העגלה השתנה

חיפוש לפי המזהים שלכם

קבלת מוצר לפי מזהה המוצר שלך

קבלת מוצר באמצעות מזהה המוצר שלך.

GET /catalog/products/by-product-id/:productId

דוגמה:

curl "https://api-eu1.joryio.com/catalog/products/by-product-id/SKU-12345" \
-H "Authorization: Bearer $TOKEN"

קבלת הזמנה לפי מזהה ההזמנה שלך

קבלת הזמנה באמצעות מזהה ההזמנה שלך.

GET /orders/by-order-id/:orderId

דוגמה:

curl "https://api-eu1.joryio.com/orders/by-order-id/ORD-2024-001" \
-H "Authorization: Bearer $TOKEN"

תגובות שגיאה

{
"statusCode": 404,
"message": "Product SKU-12345 not found",
"error": "Not Found"
}
קוד סטטוסתיאור
400גוף בקשה לא תקין
401נדרש אימות
403הרשאות לא מספיקות
404משאב לא נמצא
409התנגשות (מזהה חיצוני כפול)
500שגיאת שרת פנימית