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

Segments API

יצירה וניהול של סגמנטים דינמיים בצורה תכנותית.

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

אימות

כל הבקשות דורשות אימות עם מפתח API:

Authorization: Bearer jry_live_your_api_key_here
Content-Type: application/json

Create Segment

יצירת סגמנט משתמשים חדש עם מסננים.

Endpoint

POST /segments

גוף בקשה

שדהסוגחובהתיאור
namestringכןשם הסגמנט (עד 255 תווים)
descriptionstringלאתיאור הסגמנט (עד 1000 תווים)
filterGroupsarrayכןמערך קבוצות מסננים (עד 20)
excludeFilterGroupsarrayלאמשתמשים שתואמים לאחת מהקבוצות האלו מוסרים (עד 20)
groupOperatorstringכןאיך לשלב קבוצות: AND או OR
tagsarrayלאשמות תגיות לארגון הסגמנטים

מבנה מסננים

כל קבוצת מסננים כוללת עד 50 מסננים:

{
filters: [
{
type: 'attribute' | 'default_attribute' | 'event' | 'ecommerce'
| 'behavioral' | 'segment' | 'canvas_execution'
| 'list_membership' | 'channel_subscription' | 'app'
| 'entity' | 'bounce_status' | 'wallet_pass',
field?: string, // For attribute filters
operator: string, // See Filter Operators below
value?: any, // Comparison value (also carries N for count operators)
eventName?: string, // For event filters
withinDays?: number, // Time window for event filters
startDate?: string, // Absolute window start (ISO 8601, event filters)
endDate?: string, // Absolute window end (ISO 8601, event filters)
segmentId?: string, // For segment filters
listId?: string, // For list_membership filters
channel?: string // For channel_subscription filters
}
],
operator: 'AND' | 'OR'
}

דוגמת בקשה - מסנן מאפיין פשוט

curl -X POST https://api-eu1.joryio.com/segments \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Premium Users",
"description": "Users on premium plan",
"filterGroups": [
{
"filters": [
{
"type": "attribute",
"field": "plan",
"operator": "equals",
"value": "premium"
}
],
"operator": "AND"
}
],
"groupOperator": "AND"
}'

דוגמת בקשה - סגמנט התנהגותי

curl -X POST https://api-eu1.joryio.com/segments \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Active Trial Users",
"description": "Trial users active in last 7 days",
"filterGroups": [
{
"filters": [
{
"type": "attribute",
"field": "plan",
"operator": "equals",
"value": "trial"
},
{
"type": "event",
"eventName": "Session Started",
"operator": "performed",
"withinDays": 7
}
],
"operator": "AND"
}
],
"groupOperator": "AND"
}'

דוגמת בקשה - סגמנט מורכב

curl -X POST https://api-eu1.joryio.com/segments \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "High-Value At-Risk Users",
"description": "Paid users with high LTV who haven'\''t logged in recently",
"filterGroups": [
{
"filters": [
{
"type": "attribute",
"field": "plan",
"operator": "in",
"value": ["premium", "enterprise"]
},
{
"type": "attribute",
"field": "lifetimeValue",
"operator": "gte",
"value": 500
}
],
"operator": "AND"
},
{
"filters": [
{
"type": "event",
"eventName": "Login",
"operator": "not_performed",
"withinDays": 14
}
],
"operator": "AND"
}
],
"groupOperator": "AND"
}'

תגובה

אובייקט הסגמנט מוחזר ישירות (בלי מעטפת). מזהי סגמנטים הם UUIDs. ספירת חברים אינה נשמרת על הסגמנט - השתמשו ב־GET /segments/:id/size:

{
"id": "3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d",
"name": "Premium Users",
"description": "Users on premium plan",
"filterGroups": [
{
"filters": [
{
"type": "attribute",
"field": "plan",
"operator": "equals",
"value": "premium"
}
],
"operator": "AND"
}
],
"excludeFilterGroups": [],
"groupOperator": "AND",
"tags": [],
"status": "active",
"createdAt": "2024-01-20T10:30:00.000Z",
"updatedAt": "2024-01-20T10:30:00.000Z"
}

Get Segment

שליפת פרטי סגמנט.

Endpoint

GET /segments/:id

פרמטרי נתיב

פרמטרסוגתיאור
idstringמזהה סגמנט

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

אובייקט הסגמנט, מוחזר ישירות (לספירת חברים עדכנית קראו ל־GET /segments/:id/size):

{
"id": "3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d",
"name": "Premium Users",
"description": "Users on premium plan",
"filterGroups": [...],
"excludeFilterGroups": [],
"groupOperator": "AND",
"tags": [],
"status": "active",
"createdAt": "2024-01-20T10:30:00.000Z",
"updatedAt": "2024-01-20T10:30:00.000Z"
}

List Segments

קבלת כל הסגמנטים עם עימוד.

Endpoint

GET /segments

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

פרמטרסוגברירת מחדלתיאור
limitnumber100תוצאות לעמוד (לכל היותר 100)
offsetnumber0מספר סגמנטים לדילוג
qstring-חיפוש טקסט חופשי בשם הסגמנט
statusstring-סינון לפי סטטוס: active או archived
tagsstring-שמות תגיות מופרדים בפסיקים
createdBystring-מזהי משתמשים יוצרים, מופרדים בפסיקים
editedBystring-מזהי עורכים אחרונים, מופרדים בפסיקים

דוגמת בקשה

curl -X GET "https://api-eu1.joryio.com/segments?limit=50&status=active" \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{
"data": [
{
"id": "3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d",
"name": "Premium Users",
"status": "active",
"createdAt": "2024-01-20T10:30:00.000Z"
},
{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"name": "Trial Users",
"status": "active",
"createdAt": "2024-01-19T09:15:00.000Z"
}
],
"pagination": {
"total": 23,
"page": 1,
"limit": 50,
"offset": 0,
"totalPages": 1,
"hasMore": false
}
}

Update Segment

עדכון שם, תיאור או מסננים של סגמנט. משתמשים ב־PUT (אין מסלול PATCH); שדות שלא נשלחים נשארים ללא שינוי.

Endpoint

PUT /segments/:id

גוף בקשה

{
"name": "Updated Name",
"description": "Updated description",
"filterGroups": [...]
}

דוגמת בקשה

curl -X PUT https://api-eu1.joryio.com/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"description": "Premium users who have made at least one purchase"
}'

תגובה

אובייקט הסגמנט המעודכן, מוחזר ישירות:

{
"id": "3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d",
"name": "Premium Users",
"description": "Premium users who have made at least one purchase",
"status": "active",
"updatedAt": "2024-01-21T14:30:00.000Z"
}

Archive Segment

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

Endpoints

POST /segments/:id/archive
POST /segments/:id/unarchive

דוגמת בקשה

curl -X POST https://api-eu1.joryio.com/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d/archive \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

אובייקט הסגמנט עם הסטטוס החדש:

{
"id": "3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d",
"name": "Premium Users",
"status": "archived",
"updatedAt": "2024-01-21T14:30:00.000Z"
}

הערות

  • ארכוב סגמנט לא מוחק את המשתמשים שבו
  • קמפיינים פעילים שמשתמשים בסגמנט יושפעו
  • השתמשו ב־POST /segments/:id/unarchive לשחזור

Get Segment Users

קבלת רשימת משתמשים בסגמנט.

Endpoint

GET /segments/:id/users

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

פרמטרסוגברירת מחדלתיאור
limitnumber100מספר משתמשים להחזרה
offsetnumber0מספר משתמשים לדילוג

דוגמת בקשה

curl -X GET "https://api-eu1.joryio.com/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d/users?limit=100" \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

מערך JSON חשוף של מסמכי משתמשים (בלי מעטפת עימוד - בצעו עימוד באמצעות limit / offset):

[
{
"_id": "665f1e2a9b3c4d5e6f7a8b9c",
"externalId": "user_123",
"email": "user1@example.com",
"attributes": {
"plan": "premium",
"signupDate": "2024-01-15"
}
},
{
"_id": "665f1e2a9b3c4d5e6f7a8b9d",
"externalId": "user_456",
"email": "user2@example.com",
"attributes": {
"plan": "premium",
"signupDate": "2024-01-18"
}
}
]

Get Segment Size

קבלת מספר המשתמשים הנוכחי בסגמנט. כברירת מחדל זהו אומדן מהיר מקורב; העבירו ?exact=true לספירה מדויקת. רק המספר עצמו עשוי להיות מקורב - החברות בפועל והשליחות תמיד מדויקות.

Endpoint

GET /segments/:id/size

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

פרמטרסוגברירת מחדלתיאור
exactbooleanfalsetrue מחזיר ספירה מדויקת (איטי יותר בסביבות עבודה גדולות)

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d/size \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{
"segmentId": "3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d",
"size": 1234,
"approximate": true
}

אופרטורים למסננים

אופרטורים למאפיינים

אופרטורתיאורדוגמה
equalsהתאמה מדויקתplan equals "premium"
not_equalsלא שווהplan not_equals "free"
inערך ברשימהplan in ["premium", "enterprise"]
not_inערך לא ברשימהplan not_in ["free", "trial"]
containsמכיל מחרוזתemail contains "@company.com"
not_containsלא מכיל מחרוזתemail not_contains "@competitor.com"
gtגדול מlifetimeValue > 1000
gteגדול או שווהage >= 18
ltקטן מloginCount < 5
lteקטן או שווהmrr <= 99
existsשדה קייםphone exists
not_existsשדה לא קייםreferralCode not_exists
within_next_daysתאריך בתוך N ימים קדימהtrialEndsDate within_next_days 7

אופרטורים לאירועים

אופרטורתיאורדוגמה
performedהמשתמש ביצע אירועPerformed "Order Completed"
not_performedהמשתמש לא ביצע אירועNot performed "Onboarding Completed"
performed_count_gteספירת אירועים גדולה או שווה (N בשדה value)Performed "Login" >= 10 times
performed_count_lteספירת אירועים קטנה או שווה (N בשדה value)Performed "Login" <= 5 times
performed_in_last_daysבוצע ב־N הימים האחרונים (N בשדה value)Performed "Login" in last 7 days
not_performed_in_last_daysלא בוצע ב־N הימים האחרונים (N בשדה value)No "Login" in last 14 days

דוגמאות למסננים

מסננים למאפיינים

// String matching
{
"type": "attribute",
"field": "email",
"operator": "contains",
"value": "@company.com"
}

// Numeric comparison
{
"type": "attribute",
"field": "lifetimeValue",
"operator": "gte",
"value": 500
}

// Multiple values
{
"type": "attribute",
"field": "plan",
"operator": "in",
"value": ["premium", "enterprise"]
}

// Field exists
{
"type": "attribute",
"field": "phone",
"operator": "exists"
}

// Date within next N days (future dates)
{
"type": "attribute",
"field": "trialEndsDate",
"operator": "within_next_days",
"value": 7
}

מסננים לאירועים

// Event performed within timeframe
{
"type": "event",
"eventName": "Order Completed",
"operator": "performed",
"withinDays": 30
}

// Event not performed
{
"type": "event",
"eventName": "Onboarding Completed",
"operator": "not_performed"
}

// Event count (N goes in `value`)
{
"type": "event",
"eventName": "Login",
"operator": "performed_count_gte",
"value": 10,
"withinDays": 30
}

מסננים לסגמנטים

// User in another segment
{
"type": "segment",
"segmentId": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"operator": "in_segment"
}

// User not in another segment
{
"type": "segment",
"segmentId": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"operator": "not_in_segment"
}

דוגמאות סגמנטים נפוצים

הזדמנות להמרת טרייל

{
"name": "Trial Expiring Soon",
"description": "Users whose trial ends in the next 3 days and haven't purchased",
"filterGroups": [
{
"filters": [
{
"type": "attribute",
"field": "plan",
"operator": "equals",
"value": "trial"
},
{
"type": "attribute",
"field": "trialEndsDate",
"operator": "within_next_days",
"value": 3
},
{
"type": "event",
"eventName": "Order Completed",
"operator": "not_performed"
}
],
"operator": "AND"
}
],
"groupOperator": "AND"
}

Power Users

{
"name": "Power Users",
"filterGroups": [
{
"filters": [
{
"type": "event",
"eventName": "Login",
"operator": "performed_count_gte",
"value": 20,
"withinDays": 30
},
{
"type": "event",
"eventName": "Feature Used",
"operator": "performed_count_gte",
"value": 50,
"withinDays": 30
}
],
"operator": "AND"
}
],
"groupOperator": "AND"
}

לקוחות בסיכון

{
"name": "At-Risk Premium Users",
"filterGroups": [
{
"filters": [
{
"type": "attribute",
"field": "plan",
"operator": "in",
"value": ["premium", "enterprise"]
},
{
"type": "attribute",
"field": "lifetimeValue",
"operator": "gte",
"value": 500
}
],
"operator": "AND"
},
{
"filters": [
{
"type": "event",
"eventName": "Login",
"operator": "not_performed",
"withinDays": 14
}
],
"operator": "AND"
}
],
"groupOperator": "AND"
}

עדכונים דינמיים

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

בדיקת גודל הסגמנט

# Get current size (approximate by default; add ?exact=true for a precise count)
curl -X GET https://api-eu1.joryio.com/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d/size \
-H "Authorization: Bearer jry_live_your_api_key"

תגובות שגיאה

כל השגיאות משתמשות בגוף השגיאה הסטנדרטי - ראו סקירת API: תגובת שגיאה.

400 Bad Request - Invalid Filter

{
"statusCode": 400,
"message": "Bad Request Exception",
"timestamp": "2026-01-15T10:30:00.000Z",
"path": "/segments",
"errors": [
"filterGroups.0.filters.0.operator must be one of the following values: equals, not_equals, contains, ..."
]
}

404 Not Found

{
"statusCode": 404,
"message": "Segment with ID 3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d not found",
"timestamp": "2026-01-15T10:30:00.000Z",
"path": "/segments/3f9d2c1e-7a54-4b2e-9c1d-8e6f5a4b3c2d"
}

מגבלות קצב

ל־Segments API אין כיום מגבלות קצב קבועות לכל נקודת קצה - ראו סקירת API: מגבלות קצב.


שיטות עבודה מומלצות

1. שמרו על סגמנטים ממוקדים

טוב: סגמנטים ספציפיים וממוקדים

{
"name": "Premium US Users - Active Last 7 Days",
"filters": [...]
}

לא טוב: סגמנטים רחבים מדי

{
"name": "All Users",
"filters": []
}

2. שמות תיאוריים

טוב: שמות מובנים מאליהם

  • "Trial Users - Expiring This Week"
  • "High-Value At-Risk Customers"
  • "New Signups - Not Onboarded"

לא טוב: שמות לא ברורים

  • "Segment 1"
  • "Test"
  • "Users ABC"

3. שילוב מסננים באופן לוגי

השתמשו ב־AND לצמצום ו־OR להרחבה:

// AND: Premium users who are active
{
"filters": [
{ "field": "plan", "operator": "equals", "value": "premium" },
{ "eventName": "Login", "operator": "performed", "withinDays": 7 }
],
"operator": "AND"
}

// OR: Users on any paid plan
{
"filters": [
{ "field": "plan", "operator": "equals", "value": "premium" },
{ "field": "plan", "operator": "equals", "value": "enterprise" }
],
"operator": "OR"
}

4. עקבו אחרי גודל הסגמנט

עקבו אחרי הגודל לאורך זמן:

// Poll segment size
setInterval(async () => {
const { size, approximate } = await fetch(`/segments/${segmentId}/size`).then(r => r.json());
console.log(`Segment size: ${approximate ? '≈' : ''}${size}`);
}, 60000); // Every minute

צעדים הבאים