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

Subscriptions API

Subscriptions API הוא ממשק ההסכמה של Joryio. הוא מנהל, לכל איש קשר, את מצב ה־opt-in/opt-out בכל ערוץ הודעות (אימייל, SMS, WhatsApp, פוש ו־Viber), חברות ברשימות הרשמה (קטגוריות הסכמה או נושאים), מצב החזרות באימייל והיסטוריית ביקורת מלאה של שינויי ההסכמה.

העמוד מכסה שלושה משאבים:

  • הסכמה של איש קשר - /subscriptions/contacts/...: קריאה ושינוי של הסכמת הערוצים והרשימות של איש קשר בודד.
  • רשימות הרשמה - /lists: יצירה וניהול של הרשימות עצמן, כולל פעולות חברות באצווה.
  • עמוד העדפות מתארח - /subscriptions/hosted-page: עריכת העמוד המתארח של מרכז ההעדפות בסביבת העבודה.

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

אימות

כל בקשה דורשת אימות באמצעות מפתח API (אפשר להשתמש גם בטוקן JWT של סשן לוח הבקרה):

Authorization: Bearer jry_live_your_api_key_here
Content-Type: application/json

הרשאות לכל נקודת קצה

EndpointScope
GET /subscriptions/contacts/:userIdcompliance:read
PUT /subscriptions/contacts/:userId/channels/:channelcompliance:write
POST /subscriptions/contacts/:userId/clear-bouncecompliance:write
GET /subscriptions/contacts/:userId/listscompliance:read
POST /subscriptions/contacts/:userId/lists/:listIdcompliance:write
DELETE /subscriptions/contacts/:userId/lists/:listIdcompliance:write
GET /subscriptions/contacts/:userId/historycompliance:read
GET /subscriptions/contacts/:userId/channels/:channel/statuscompliance:read
GET /subscriptions/contacts/:userId/email-validcompliance:read
POST /listssettings:write
GET /lists, GET /lists/:listId, GET /lists/:listId/statssettings:read
GET /lists/:listId/memberscompliance:read
PUT /lists/:listId, DELETE /lists/:listId, POST /lists/:listId/restoresettings:write
POST /lists/:listId/members/bulk, DELETE /lists/:listId/members/bulksettings:write
GET /subscriptions/hosted-page/preference-center, POST /subscriptions/hosted-page/previewsettings:read
PUT /subscriptions/hosted-page/preference-centersettings:write

מושגי יסוד

מזהה איש הקשר

כל נתיב /subscriptions/contacts/:userId מקבל את מזהה איש הקשר הפנימי של Joryio - ה־id שמוחזר מה־Users API - ולא את ה־userId החיצוני שאתם שולחים באירועים. המזהה חייב להיות ObjectId של 24 תווים הקסדצימליים (או UUID); כל ערך אחר נדחה עם 400 Bad Request.

רישום כבר בזמן היצירה

אפשר לצרף איש קשר לרשימות כבר בקריאה שיוצרת אותו: POST /users מקבל מערך subscriptions אופציונלי (הצטרפות בקריאה אחת) - ראו Users API. נקודות הקצה העצמאיות בעמוד זה הן הדרך לנהל הסכמה לאחר היצירה: הגדירו הסכמה לערוץ באמצעות PUT /subscriptions/contacts/:userId/channels/:channel וחברות ברשימה באמצעות POST /subscriptions/contacts/:userId/lists/:listId. הרשמות בזמן היצירה לעולם אינן מבטלות opt-out קיים - הצטרפות מפורשת מחדש חייבת להתבצע באמצעות POST /subscriptions/contacts/:userId/lists/:listId.

ערוצים

קיימים חמישה ערוצי הרשמה: email, sms, whatsapp, push, viber. כל ערך ערוץ אחר מחזיר 400 Bad Request.

ערכי סטטוס

סטטוסתיאור
optedInהצטרפות מפורשת (למשל אישור double opt-in)
subscribedמנוי (single opt-in / ברירת מחדל)
unsubscribedביטל הרשמה

ערכי הסטטוס הם camelCase - optedIn, לא opted_in. איש קשר ללא סטטוס רשום לערוץ נחשב מנוי מבחינת שערי השליחה ("אין רשומה" אינו opt-out).

שינויי הסכמה נרשמים ומשוכפלים

כל כתיבה דרך ה־API הזה נרשמת ביומן ביקורת ההרשמות של איש הקשר (עם המקור, כתובת ה־IP, ה־user agent וזהות מפתח ה־API או המנהל שביצע את הפעולה), וניתנת לשליפה דרך נקודת הקצה להיסטוריה. בנוסף, ביטולי הרשמה משוכפלים לרשימות חסימה לפי מזהה - ביטול הרשמה ב־SMS או ב־WhatsApp חל לפי מספר הטלפון, וביטול הרשמה באימייל חל לפי הכתובת בכל סביבת העבודה, כך שגם אנשי קשר כפולים שחולקים את המזהה מכוסים. ראו Suppressions API.


הסכמה של איש קשר

קבלת ההרשמות של איש קשר

מחזיר את מצב ההסכמה לכל ערוץ של איש הקשר, יחד עם החברות שלו ברשימות.

Endpoint

GET /subscriptions/contacts/:userId

פרמטרים בנתיב

פרמטרסוגתיאור
userIdstringמזהה איש הקשר ב-Joryio

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0 \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{
"channels": {
"email": {
"status": "subscribed",
"optInDate": "2026-05-14T09:21:07.000Z",
"optInSource": "api",
"consentText": "Send me product updates",
"isValid": true,
"bounceType": null,
"bounceCount": 0
},
"sms": {
"status": "unsubscribed",
"optOutDate": "2026-06-02T18:40:00.000Z",
"optInSource": "preference_center"
}
},
"lists": [
{
"_id": "665f2e11aa22bb33cc44dd55",
"organizationId": "org-uuid",
"workspaceId": "ws-uuid",
"contactId": "665f1c2ab3d4e5f6a7b8c9d0",
"listId": "3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b",
"channel": "email",
"status": "subscribed",
"subscribedAt": "2026-05-14T09:21:07.000Z",
"optInSource": "api",
"createdAt": "2026-05-14T09:21:07.000Z",
"updatedAt": "2026-05-14T09:21:07.000Z"
}
]
}

ערוצים שאין לאיש הקשר מצב רשום עבורם פשוט אינם מופיעים ב־channels. ערוץ האימייל כולל גם את שדות ההחזרה (isValid, bounceType, bounceCount, lastBounceAt). lists מחזיר את 500 רשומות החברות הראשונות של איש הקשר.

מחזיר 404 Not Found אם איש הקשר אינו קיים בסביבת העבודה.


עדכון הרשמה לערוץ

מגדיר את סטטוס ההסכמה של איש קשר לערוץ אחד.

Endpoint

PUT /subscriptions/contacts/:userId/channels/:channel

פרמטרים בנתיב

פרמטרסוגתיאור
userIdstringמזהה איש הקשר ב-Joryio
channelstringemail, sms, whatsapp, push או viber

גוף הבקשה

שדהסוגחובהתיאור
channelstringכןחייב להתאים לערוץ שבנתיב (אם הם שונים - הערך שבנתיב גובר)
statusstringכןoptedIn, subscribed או unsubscribed
sourcestringלאמקור השינוי, למשל api, preference_center (ברירת מחדל api)
consentTextstringלאטקסט ההסכמה שהוצג בעת ה־opt-in (נשמר לצורכי ציות)
reasonstringלאסיבה בטקסט חופשי, שנשמרת ברשומת הביקורת

דוגמת בקשה

curl -X PUT https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/channels/email \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"channel": "email",
"status": "unsubscribed",
"source": "preference_center",
"reason": "User requested via support ticket"
}'

תגובה

אובייקט ה־channels המעודכן והמלא של איש הקשר:

{
"email": {
"status": "unsubscribed",
"optOutDate": "2026-07-12T10:15:00.000Z",
"optInSource": "preference_center",
"isValid": true,
"bounceType": null,
"bounceCount": 0
},
"sms": {
"status": "subscribed",
"optInDate": "2026-05-14T09:21:07.000Z"
}
}

הערות התנהגות

  • opt-in (optedIn / subscribed) בערוץ האימייל מנקה מצב זמני של החזרה רכה, אך לעולם אינו מבטל החזרה קשה - פעולת הסכמה אינה מוכיחה שתיבת דואר שאינה פעילה חזרה לפעול. כדי להסיר החזרה קשה, השתמשו בניקוי מצב ההחזרה.
  • unsubscribed בערוצי sms או whatsapp משוכפל לרשימת החסימה לפי מספר טלפון (ה־opt-out חל לפי המספר בכל הארגון). שינוי מצב באימייל משוכפל לרשימה לפי כתובת בסביבת העבודה.
  • השינוי נרשם ביומן הביקורת עם כתובת ה־IP, ה־user agent וזהות המנהל או המפתח שביצע את הפעולה.

ניקוי מצב ההחזרה

מאפס את מצב ההחזרות באימייל של איש הקשר ומסיר את החסימה בשל יכולת מסירה לפי כתובת. זו הדרך המורשית להסיר החזרה קשה; הרשמה מחדש מצד הנמען אינה מסירה אותה.

Endpoint

POST /subscriptions/contacts/:userId/clear-bounce

גוף הבקשה

שדהסוגחובהתיאור
reasonstringלאסיבה בטקסט חופשי, שנשמרת ברשומת הביקורת

דוגמת בקשה

curl -X POST https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/clear-bounce \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "reason": "Mailbox restored, confirmed with customer" }'

תגובה

{ "success": true }

מנקה את bounceType, bounceCount ו־lastBounceAt, ומחזיר את isValid ל־true. נוסף על כך, הפעולה מוחקת את שורות ה־hard_bounce וה־complaint של הכתובת מרשימת החסימה של סביבת העבודה, כך שהניקוי חל על כל אנשי הקשר הכפולים שחולקים את הכתובת.


קבלת הרשמות לרשימות

מחזיר את כל רשומות החברות של איש הקשר ברשימות, בין שההרשמה בהן פעילה ובין שבוטלה.

Endpoint

GET /subscriptions/contacts/:userId/lists

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/lists \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

[
{
"_id": "665f2e11aa22bb33cc44dd55",
"organizationId": "org-uuid",
"workspaceId": "ws-uuid",
"contactId": "665f1c2ab3d4e5f6a7b8c9d0",
"listId": "3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b",
"channel": "email",
"status": "subscribed",
"subscribedAt": "2026-05-14T09:21:07.000Z",
"optInSource": "api",
"createdAt": "2026-05-14T09:21:07.000Z",
"updatedAt": "2026-05-14T09:21:07.000Z"
}
]

החברות ייחודית לכל שילוב של איש קשר + רשימה + ערוץ: אותו איש קשר יכול להיות מנוי לרשימה ב־email ומבוטל ממנה ב־sms, כשתי רשומות נפרדות.


צירוף איש קשר לרשימה

מצרף איש קשר לרשימה בערוץ אחד. הפעולה אידמפוטנטית - קריאה חוזרת מאשרת מחדש את ההרשמה. זהו גם נתיב ה־opt-in המפורש והמתועד ביומן הביקורת, שבאמצעותו אפשר לצרף מחדש איש קשר שביטל בעבר את הרשמתו לרשימה; הוספה באצווה לעולם אינה עושה זאת.

Endpoint

POST /subscriptions/contacts/:userId/lists/:listId

פרמטרים בנתיב

פרמטרסוגתיאור
userIdstringמזהה איש הקשר ב-Joryio
listIdstringמזהה רשימת ההרשמה (UUID)

גוף הבקשה

שדהסוגחובהתיאור
channelstringכןemail, sms, whatsapp, push או viber
sourcestringלאלמשל api, form, import, preference_center (ברירת מחדל api)
consentTextstringלאטקסט ההסכמה שהוצג בעת ה־opt-in

דוגמת בקשה

curl -X POST https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "channel": "email", "source": "api", "consentText": "Weekly newsletter signup" }'

תגובה

רשומת החברות שנוצרה או עודכנה:

{
"_id": "665f2e11aa22bb33cc44dd55",
"organizationId": "org-uuid",
"workspaceId": "ws-uuid",
"contactId": "665f1c2ab3d4e5f6a7b8c9d0",
"listId": "3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b",
"channel": "email",
"status": "subscribed",
"subscribedAt": "2026-07-12T10:20:00.000Z",
"optInSource": "api",
"consentText": "Weekly newsletter signup",
"createdAt": "2026-07-12T10:20:00.000Z",
"updatedAt": "2026-07-12T10:20:00.000Z"
}

ביטול הרשמת איש קשר מרשימה

מבטל הרשמה של איש קשר מרשימה בערוץ אחד. הערוץ עובר בגוף הבקשה, לא בנתיב.

Endpoint

DELETE /subscriptions/contacts/:userId/lists/:listId

גוף הבקשה

שדהסוגחובהתיאור
channelstringכןemail, sms, whatsapp, push או viber
sourcestringלאלמשל api, preference_center (ברירת מחדל api)

דוגמת בקשה

curl -X DELETE https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "channel": "email", "source": "preference_center" }'

תגובה

{ "success": true }

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


קבלת היסטוריית הרשמות

מחזיר את יומן הביקורת של הסכמות איש הקשר, מהחדש לישן.

Endpoint

GET /subscriptions/contacts/:userId/history

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

פרמטרסוגברירת מחדלתיאור
limitnumber50רשומות לעמוד (ערך לא מספרי חוזר לברירת המחדל)
offsetnumber0היסט עימוד

דוגמת בקשה

curl -X GET "https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/history?limit=50&offset=0" \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{
"items": [
{
"id": "8a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
"organizationId": "org-uuid",
"workspaceId": "ws-uuid",
"contactId": "665f1c2ab3d4e5f6a7b8c9d0",
"channel": "email",
"listId": null,
"action": "unsubscribe",
"previousStatus": "subscribed",
"newStatus": "unsubscribed",
"source": "preference_center",
"ipAddress": "203.0.113.7",
"userAgent": "Mozilla/5.0 ...",
"consentText": null,
"metadata": { "reason": "User requested via support ticket" },
"createdAt": "2026-07-12T10:15:00.000Z"
}
],
"total": 12
}

action הוא אחד מ־subscribe, unsubscribe, resubscribe, bounce, hard_bounce, soft_bounce, complaint, import, api_update. listId מוגדר עבור שינויים ברמת רשימה ו־null עבור שינויים ברמת ערוץ.


בדיקת סטטוס הרשמה לערוץ

בדיקה בוליאנית קלה - האם מותר לשלוח לאיש הקשר בערוץ הזה מבחינת הסכמה?

Endpoint

GET /subscriptions/contacts/:userId/channels/:channel/status

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/channels/email/status \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{ "subscribed": true }

subscribed הוא true אלא אם איש הקשר unsubscribed במפורש בערוץ - איש קשר ללא סטטוס רשום נחשב מנוי. מזהה איש קשר לא מוכר מחזיר { "subscribed": false } (לא 404).


בדיקת תקינות אימייל

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

Endpoint

GET /subscriptions/contacts/:userId/email-valid

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/email-valid \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{ "valid": true }

valid הוא false רק כאשר החזרה קשה סימנה את הכתובת כלא תקינה. מזהה איש קשר לא מוכר מחזיר { "valid": false } (ולא 404). שימו לב: הערך משקף יכולת מסירה, לא הסכמה - איש קשר שביטל הרשמה אך כתובתו תקינה עדיין מחזיר true.


רשימות הרשמה

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

יצירת רשימה

Endpoint

POST /lists

גוף הבקשה

שדהסוגחובהתיאור
namestringכןשם הרשימה (עד 255 תווים, ייחודי בסביבת העבודה)
descriptionstringלאתיאור (עד 1000 תווים)
channelsstring[]לאהערוצים שהרשימה חלה עליהם (ברירת מחדל ["email"])
isPublicbooleanלאהצגה במרכז ההעדפות (ברירת מחדל true)
typestringלאmarketing או transactional (ברירת מחדל marketing)
requireDoubleOptInbooleanלאדרישת opt-in מאושר (ברירת מחדל false)

דוגמת בקשה

curl -X POST https://api-eu1.joryio.com/lists \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Weekly Newsletter",
"description": "Our weekly digest of product updates",
"channels": ["email"],
"isPublic": true,
"type": "marketing",
"requireDoubleOptIn": false
}'

תגובה

{
"id": "3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b",
"organizationId": "org-uuid",
"workspaceId": "ws-uuid",
"name": "Weekly Newsletter",
"description": "Our weekly digest of product updates",
"channels": ["email"],
"isPublic": true,
"type": "marketing",
"requireDoubleOptIn": false,
"isDefault": false,
"displayOrder": 0,
"senderId": null,
"archivedAt": null,
"createdAt": "2026-07-12T10:30:00.000Z",
"updatedAt": "2026-07-12T10:30:00.000Z"
}

isDefault מסמן את קטגוריית ה־Marketing שנוצרת אוטומטית כברירת מחדל; senderId מוגדר כאשר הרשימה היא קבוצת הרשמה לפי מספר ב־SMS או ב־WhatsApp, שמשויכת לשולח מסוים.


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

Endpoint

GET /lists

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

פרמטרסוגברירת מחדלתיאור
includeArchivedstringfalseהעבירו true כדי לכלול רשימות בארכיון

דוגמת בקשה

curl -X GET "https://api-eu1.joryio.com/lists?includeArchived=false" \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

מערך של אובייקטי רשימה (באותו מבנה כמו יצירת רשימה), מהחדש לישן, עד 200 רשימות.


קבלת רשימה

GET /lists/:listId

מחזיר את אובייקט הרשימה. 404 Not Found אם הרשימה אינה קיימת או שהיא בארכיון.


עדכון רשימה

PUT /lists/:listId

גוף הבקשה: כל תת־קבוצה של השדות שמתוארים תחת יצירת רשימה (name, description, channels, isPublic, type, requireDoubleOptIn). מחזיר את אובייקט הרשימה המעודכן.


העברת רשימה לארכיון

DELETE /lists/:listId

מחיקה רכה - הפעולה מגדירה את archivedAt ושומרת את רשומות החברות. היא מחזירה 204 No Content. כדי לשחזר, השתמשו ב:

POST /lists/:listId/restore

שמחזיר את אובייקט הרשימה המשוחזר.


קבלת חברי רשימה

Endpoint

GET /lists/:listId/members

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

פרמטרסוגברירת מחדלתיאור
channelstring-מסנן אופציונלי: email, sms, whatsapp, push, viber
statusstring-מסנן אופציונלי: subscribed או unsubscribed
limitnumber50רשומות לעמוד
offsetnumber0היסט עימוד

דוגמת בקשה

curl -X GET "https://api-eu1.joryio.com/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b/members?channel=email&status=subscribed&limit=50" \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{
"members": [
{
"_id": "665f2e11aa22bb33cc44dd55",
"contactId": "665f1c2ab3d4e5f6a7b8c9d0",
"listId": "3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b",
"channel": "email",
"status": "subscribed",
"subscribedAt": "2026-05-14T09:21:07.000Z",
"optInSource": "api",
"organizationId": "org-uuid",
"workspaceId": "ws-uuid",
"createdAt": "2026-05-14T09:21:07.000Z",
"updatedAt": "2026-05-14T09:21:07.000Z"
}
],
"total": 1234
}

קבלת סטטיסטיקות רשימה

Endpoint

GET /lists/:listId/stats

דוגמת בקשה

curl -X GET https://api-eu1.joryio.com/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b/stats \
-H "Authorization: Bearer jry_live_your_api_key"

תגובה

{
"total": 1500,
"byChannel": {
"email": 1180,
"sms": 120,
"whatsapp": 0,
"push": 0,
"viber": 0
},
"subscribed": 1300,
"unsubscribed": 200
}

byChannel סופר חברויות שאינן מבוטלות לכל ערוץ.


הוספת חברים באצווה

מוסיף עד 10,000 אנשי קשר לרשימה בערוץ אחד בקריאה בודדת.

Endpoint

POST /lists/:listId/members/bulk

גוף הבקשה

שדהסוגחובהתיאור
contactIdsstring[]כןמזהי אנשי קשר ב-Joryio (עד 10,000)
channelstringכןemail, sms, whatsapp, push או viber
sourcestringלאנשמר כ־optInSource של החברות

דוגמת בקשה

curl -X POST https://api-eu1.joryio.com/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b/members/bulk \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"contactIds": ["665f1c2ab3d4e5f6a7b8c9d0", "665f1c2ab3d4e5f6a7b8c9d1"],
"channel": "email",
"source": "import"
}'

תגובה

{ "added": 2, "updated": 0, "skippedUnsubscribed": 0 }

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


הסרת חברים באצווה

מבטל הרשמה של עד 10,000 אנשי קשר מרשימה בערוץ אחד.

Endpoint

DELETE /lists/:listId/members/bulk

גוף הבקשה

שדהסוגחובהתיאור
contactIdsstring[]כןמזהי אנשי קשר ב-Joryio (עד 10,000)
channelstringכןemail, sms, whatsapp, push או viber

דוגמת בקשה

curl -X DELETE https://api-eu1.joryio.com/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b/members/bulk \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"contactIds": ["665f1c2ab3d4e5f6a7b8c9d0"],
"channel": "email"
}'

תגובה

{ "removed": 1 }

ההסרה משנה רשומות חברות קיימות ל־unsubscribed (הרשומות נשמרות לצורך תיעוד הביקורת), ולכן שער השליחה חוסם את אנשי הקשר שהוסרו משליחות עתידיות לרשימה.


עמוד העדפות מתארח

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

קבלת תבנית מרכז ההעדפות

GET /subscriptions/hosted-page/preference-center

תגובה

{
"type": "preference_center",
"mode": "default",
"html": "",
"redirectUrl": "",
"designJson": null,
"updatedAt": null
}

mode הוא אחד מ־default (העמוד המובנה של Joryio), custom (תבנית HTML/Liquid משלכם), dnd (נוצר בעורך החזותי ומפיק את אותו html) או redirect (רישום ה־opt-out ולאחר מכן הפניה אל redirectUrl).

עדכון תבנית מרכז ההעדפות

PUT /subscriptions/hosted-page/preference-center

גוף הבקשה

שדהסוגחובהתיאור
modestringלאdefault, custom, dnd או redirect
htmlstringלאגוף HTML/Liquid עבור מצב custom או dnd (עד 100KB); חייב לכלול את המיקום {{ preferences_form }}
redirectUrlstringלאיעד עבור מצב redirect (עד 2048 תווים)
designJsonobjectלאמצב העורך החזותי שנשמר לצורך עריכה חוזרת (dnd בלבד; מנוקה במצבים אחרים)

מחזיר את התבנית שנשמרה באותו מבנה כמו תגובת ה־GET.

תצוגה מקדימה של תבנית

POST /subscriptions/hosted-page/preview

גוף הבקשה: { "html": "..." } - התבנית להצגה עם נתוני דוגמה. תגובה: { "html": "<rendered, sanitized html>" }.


ממשקים קשורים (שאינם בעמוד זה)

  • נקודות קצה לנמענים - ביטול הרשמה בלחיצה אחת (POST /u/:token) ועמודי ההעדפות המתארחים הם נקודות קצה ציבוריות שמאומתות באמצעות טוקן עבור הנמענים, ולא באמצעות מפתח API.
  • Web SDK - POST /v1/subscriptions/channel ו־POST /v1/subscriptions/group מאומתות באמצעות מפתח SDK (X-SDK-Key) עבור ממשקי העדפות בצד הלקוח. ראו מדריך ניהול ההרשמות.
  • Webhooks של ספקים - Webhooks על החזרות ועל מילות מפתח נכנסות ב־SMS (/webhooks/email/..., /webhooks/sms/...) הם אינטגרציות עם ספקים שמאומתות באמצעות חתימה.
  • חסימות - לרשימת ה"לא לשלוח" ברמת סביבת העבודה יש Suppressions API משלה.

הצעדים הבאים