מסכםמפתחים
English
הורדת OpenAPIיצירת מפתח API

גרסה 1

ה-API של מסכם

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

כתובת הבסיסhttps://mesakem.com/api/v1

סקירה ושימושים

ה-API הוא REST מעל HTTPS עם JSON ב-UTF-8. כל בקשה מזוהה במפתח API אישי שפועל בשמכם, באזור עבודה אחד, ורואה בדיוק את מה שהדשבורד מראה לכם — לא יותר. פגישה שנמחקה במסכם מחזירה 404 מיד.

סנכרון ל-CRM

סיכום, החלטות ומשימות לעסקה ב-HubSpot, Salesforce או Monday לפי דומיין המשתתפים.

משימות לכלי ניהול

משימות מפגישות ל-Asana, ClickUp או Jira, עם אחראי ותאריך יעד.

בסיס ידע

סיכומים ב-Markdown או HTML ישר ל-Notion או Confluence.

BI ואנליטיקה

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

סוכני AI ו-RAG

תמלולים וסיכומים כמקור ידע לסוכן פנימי.

ארכוב ותאימות

תמלולים (VTT/SRT) וסיכומים לארכיון שלכם, כולל קבצי DOCX.

התחלה מהירה

  1. פתחו בדשבורד את הגדרות ← API ו-Webhooks ולחצו על "יצירת מפתח". תנו שם, בחרו גישה ותוקף. לפתיחת ההגדרות

  2. העתיקו את המפתח (msk_live_…) — הוא מוצג פעם אחת בלבד. שמרו אותו בכספת סודות, לא בקוד.

  3. בצעו בקשה ראשונה: GET /me מאשר שהמפתח תקין ומראה את ההרשאות שלו.

  4. קראו את הפגישות האחרונות, ואז את הסיכום של אחת מהן.

export MESAKEM_API_KEY="msk_live_…"   # from Settings → API & webhooks

# 1. Check the key
curl https://mesakem.com/api/v1/me -H "Authorization: Bearer $MESAKEM_API_KEY"

# 2. Latest meetings
curl "https://mesakem.com/api/v1/meetings?limit=5" -H "Authorization: Bearer $MESAKEM_API_KEY"

# 3. A summary as Markdown
curl "https://mesakem.com/api/v1/meetings/run_…/summary?format=markdown" -H "Authorization: Bearer $MESAKEM_API_KEY"

אימות והרשאות

שלחו את המפתח בכותרת Authorization: Bearer msk_live_…. כלים בלי קוד יכולים לשלוח אותו גם ב-X-Api-Key. עוגיות לא נקראות אף פעם. מפתח שגוי, שבוטל או שפג תוקפו מחזיר 401 בלי לומר למה.

HTTP
Authorization: Bearer msk_live_AbC1…wxYz
X-Api-Key: msk_live_AbC1…wxYz
  • מפתח שייך לאזור עבודה אחד — האישי, או אזור העבודה הפרטי שלכם בארגון — ונקבע ביצירה.
  • ביטול בהגדרות עובד מיד, גם באמצע בקשה. קישורי הקלטה שהופקו ממנו מפסיקים לעבוד באותו רגע.
  • השתמשו במפתח בשרת בלבד. לא בדפדפן, לא באפליקציית מובייל ולא במאגר קוד.
  • מה שהמפתח רואה זהה לדשבורד: פגישות קרובות מהיומן שלכם בלבד, נוכחות וזמן דיבור ליוצר הפגישה בלבד, המשימות שלכם בלבד.
הרשאהמה הוא פותח
meetings:readפגישות, פגישה אחת ומשתתפים
transcripts:readתמלולים בכל הפורמטים
summaries:readסיכומים ומסמכים, כולל DOCX
recordings:readקישורי הקלטה ל-5 דקות
tasks:readהמשימות שלכם ורשימות התיוג
calendar:readפגישות קרובות מהיומן שלכם
team:readחברי הצוות בארגון (לבעלים ולמנהלים)
webhooks:readנקודות ה-Webhook שלכם, יומני המשלוחים וקטלוג האירועים
webhooks:writeיצירה, שינוי, בדיקה, החלפת סוד, שליחה חוזרת ומחיקה של נקודות (תוכניות בתשלום)
settings:readמצב ההצטרפות האוטומטית מהיומן
shares:readהקישור הציבורי של פגישה
bot:writeשליחה, תזמון וביטול של הבוט
tasks:writeיצירה ועדכון של משימות ורשימות תיוג
uploads:writeהעלאת הקלטות
settings:writeשינוי מצב ההצטרפות האוטומטית
meetings:writeשינוי שם ומחיקה של פגישות — רק בבחירה ידנית
shares:writeיצירה וביטול של קישור ציבורי — רק בבחירה ידנית
rooms:readהחדרים שלכם והחדרים המשותפים, הפריטים שבהם וההחלטות והניתוחים השמורים
rooms:writeיצירה, שינוי שם, ארכיון והוספה או הסרה של פגישות ושיחות
calls:readשיחות הטלפון שלכם: תמלול, סיכום וקישור להקלטה
search:readחיפוש מילים בפגישות, משימות, חדרים ואנשים (עם ההרשאה של כל סוג)
templates:readתבניות הסיכום המובנות ושלכם
templates:writeיצירה, עדכון, העברה לארכיון וקביעת ברירת מחדל של התבניות שלכם

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

כל תשובה מחזירה RateLimit-Limit, RateLimit-Remaining ו-RateLimit-Reset (וגם X-RateLimit-*). מעבר למגבלה מחזיר 429 עם Retry-After בשניות.

לכל מפתח60 בקשות לדקה
לכל אזור עבודה20,000 בקשות ליום (UTC)
לכל כתובת IP לפני אימות120 בקשות לדקה
שינויי webhooks לכל מפתח20 לדקה (יצירה, עדכון, מחיקה, החלפת סוד, בדיקה, שליחה חוזרת)
שליחה ותזמון של הבוט, לכל משתמש10 לדקה · 60 לשעה · 200 ליום
שליחה ותזמון של הבוט, לכל אזור עבודה20 לדקה · 120 לשעה · 300 ליום
העלאות, לכל משתמש10 לדקה, ועד 3 העלאות בתהליך
HTTP 429
HTTP/1.1 429 Too Many Requests
Retry-After: 21
RateLimit-Limit: 60
RateLimit-Remaining: 0
RateLimit-Reset: 21
X-Request-Id: apireq_mfa1b2c3XyZ0aBcDeFgHiJ

איך לעבוד נכון

העדיפו webhooks על פני משיכה

ה-webhooks שולחים לכם אירוע ברגע שסיכום מוכן — בלי בקשות מיותרות. ראו את הפרק Webhooks.

סנכרון מצטבר עם updated_since

אם חייבים למשוך: GET /meetings?updated_since=… לכל היותר פעם ב-5 דקות, ושמרו את ה-updated_at האחרון.

ETag ו-If-None-Match

שלחו את ה-ETag האחרון ב-If-None-Match. לתמלולים ולסיכומים נבדקת רק הגרסה, ו-304 חוזר בלי גוף — כמעט בלי עלות.

המתנה הדרגתית

על 429 או 5xx המתינו לפי Retry-After והוסיפו המתנה הדרגתית אקראית.

# Only what changed since your last sync, oldest change first
curl "https://mesakem.com/api/v1/meetings?updated_since=2026-10-17T08:00:00Z" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H 'If-None-Match: "c-…"'      # → 304 Not Modified when nothing changed

דפדוף

רשימות מחזירות { data, next_cursor, has_more }. שלחו limit (1–100, ברירת מחדל 25) ואת ה-cursor מהעמוד הקודם. הסמן אטום וחתום: הוא שייך למפתח, לאזור העבודה ולמסננים של הבקשה, וכל שינוי בהם מחזיר 400 invalid_cursor.

# First page
curl "https://mesakem.com/api/v1/meetings?limit=100" -H "Authorization: Bearer $MESAKEM_API_KEY"
# Next page: pass next_cursor back unchanged, with the SAME filters
curl "https://mesakem.com/api/v1/meetings?limit=100&cursor=<next_cursor>" -H "Authorization: Bearer $MESAKEM_API_KEY"

שגיאות

כל שגיאה מחזירה אותו מבנה קבוע. השדה code יציב; message בעברית או באנגלית לפי Accept-Language; request_id עוזר לנו לאתר את הבקשה.

JSON
{
  "error": {
    "code": "insufficient_scope",
    "message": "The key is missing a required scope.",
    "details": [{ "field": "scope", "message": "Requires transcripts:read." }],
    "request_id": "apireq_mfa1b2c3XyZ0aBcDeFgHiJ"
  }
}
HTTPcodeמשמעות
400bad_requestפרמטר לא תקין, לא מוכר או כפול
400invalid_cursorסמן ממפתח, נתיב או מסננים אחרים
401unauthorizedמפתח חסר, שגוי, מבוטל או שפג תוקפו
403insufficient_scopeלמפתח חסרה ההרשאה (details מציין איזו)
403plan_requiredהתוכנית לא כוללת את החלק הזה
404not_foundלא קיים או לא נגיש לכם — בלי לרמוז מה מהשניים
413payload_too_largeהתשובה גדולה מדי; הקטינו limit או דפדפו
429rate_limitedחריגה ממגבלה; ראו Retry-After
500internal_errorתקלה אצלנו
403quota_exceededמכסת הפגישות של התוכנית לא מאפשרת (reason מפרט)
409meeting_bot_already_activeכבר יש בוט בפגישה; meeting_id הוא הפגישה הקיימת
409idempotency_key_reusedאותו Idempotency-Key עם בקשה אחרת
409idempotency_in_progressהבקשה הראשונה עם המפתח עדיין רצה
409conflictמתנגש במצב הנוכחי (reason מפרט, למשל calendar_event_control_locked)
415unsupported_media_typeסוג תוכן או קובץ שלא נתמך
422unsupported_recipientשיתוף עם משתמש או צוות — רק קישור ציבורי נתמך
422unprocessableתקין אבל אי אפשר לבצע (reason מפרט)

כתיבה ו-Idempotency

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

  • בתוכנית הניסיון ה-API הוא לקריאה בלבד: כל פעולת כתיבה מחזירה 403 plan_required עם upgrade_url.
  • שלחו Idempotency-Key (למשל UUID) בכל POST, PUT ו-PATCH. ניסיון חוזר עם אותו מפתח ואותו גוף מחזיר את התשובה הראשונה במקום לבצע פעמיים — ל-24 שעות. אותו מפתח עם גוף אחר מחזיר 409.
  • כל בוט עולה כסף אמיתי, ולכן לשליחה ולתזמון יש מגבלות קשיחות לכל משתמש ולכל אזור עבודה, ומכסת הפגישות של התוכנית חלה כרגיל.
  • לפגישה יש בוט אחד לכל היותר. שליחה נוספת לאותה פגישה מחזירה 409 meeting_bot_already_active עם ה-meeting_id של הפגישה הקיימת.
  • מחיקה ושינוי שם של פגישה (meetings:write) ויצירת קישור ציבורי (shares:write) לא נכללים באף ערכה מוכנה — מסמנים אותם ידנית. מחיקה היא סופית, כמו בדשבורד.
  • שיתוף הוא בקישור ציבורי בלבד: נמען מסוג user או team מחזיר 422 unsupported_recipient, כי הפגישות של כל חבר נשארות פרטיות.

מתכון: הבוט נשלח ממערכת הזימונים

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

# A meeting was booked: send Mesakem to it, at its start time.
curl -X POST "https://mesakem.com/api/v1/meetings/bot" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: booking-48213" \
  -d '{"meeting_url":"https://zoom.us/j/1234567890?pwd=abc123","title":"Discovery call — Acme","start_time":"2026-10-20T07:00:00Z"}'
# 202 → {"meeting_id":"run_…","status":"scheduling"}
# 409 meeting_bot_already_active → error.meeting_id is the meeting that already has the bot

כך נראית כתיבה בתוכנית הניסיון

HTTP 403
{
  "error": {
    "code": "plan_required",
    "message": "Your plan does not include this part of the API.",
    "details": [
      { "field": "scope", "message": "bot:write is not included in this plan." },
      { "field": "plan", "message": "The trial includes read-only API access. Upgrade to Pro for writes: https://mesakem.com/dashboard/billing/pro?cycle=annual" }
    ],
    "request_id": "apireq_mfa1b2c3XyZ0aBcDeFgHiJ",
    "upgrade_url": "https://mesakem.com/dashboard/billing/pro?cycle=annual"
  }
}

Webhooks

Webhooks הופכים את הכיוון: במקום שהמערכת שלכם תשאל את ה-API כל כמה דקות אם משהו השתנה, מסכם שולח אליה בקשת POST חתומה ברגע שמשהו קורה — סיכום מוכן, משימה נוצרה, פגישה נמחקה. אתם שומעים על השינוי מיד, בלי בקשות מבוזבזות ובלי לפספס אירוע בין בדיקה לבדיקה.

מיד

האירוע יוצא רגע אחרי שהשינוי נשמר — לא בסבב הבדיקה הבא שלכם.

חתום ורזה

כל משלוח חתום לפי Standard Webhooks ונושא רק מזהים, סטטוס ומספרים. את הפרטים מושכים ב-API, עם ההרשאות של המפתח.

אמין

משלוח שנכשל נשלח שוב — עד 9 ניסיונות בכ-45 שעות — עם יומן משלוחים ושליחה חוזרת.

רק מה שרלוונטי

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

איך זה עובד

  1. משהו קורה במסכםסיכום מוכן, משימה השתנתה, פגישה נמחקה
  2. מסכם חותם ושולח POSTלכל נקודה שנרשמה לאירוע
  3. אתם מאמתים ומחזירים תשובת הצלחהתוך 10 שניות; את העבודה עושים אחר כך
  4. מושכים פרטים ב-APIמ-data.links.api, כשצריך

Webhooks: התחלה מהירה עם webhooks

  1. צרו נקודת Webhook: בהגדרות ← API ו-Webhooks, או בבקשת POST /webhooks עם מפתח שיש לו webhooks:write (בתוכניות בתשלום). לפתיחת ההגדרות

  2. בחרו את האירועים שתרצו לקבל. לשני אירועים יש גם שם חלופי, ואפשר להירשם גם בו.

  3. העתיקו את הסוד לחתימה (whsec_…). הוא מוצג פעם אחת בלבד; שמרו אותו בכספת סודות.

  4. שלחו אירוע בדיקה (webhook.test) מההגדרות או ב-POST /webhooks/{endpoint_id}/test. התשובה מראה את קוד הסטטוס שלכם, את זמן התגובה ואת תחילת התשובה.

  5. אמתו את החתימה בכל בקשה וענו 2xx תוך 10 שניות.

# 1. Create the endpoint (a key with webhooks:write — or use Settings → API & webhooks)
curl -X POST "https://mesakem.com/api/v1/webhooks" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.example.com/mesakem",
    "events": ["summary.ready", "action_items.created", "meeting.deleted"],
    "description": "CRM sync"
  }'
# → 201 Created. Store "secret" (whsec_…) now: it is never shown again.

# 2. Send webhook.test and see what your endpoint answered
curl -X POST "https://mesakem.com/api/v1/webhooks/whk_…/test" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
# → { "delivered": true, "status": 200, "latency_ms": 162, … }

בתוכנית הניסיון: נקודת Webhook אחת, שמנהלים בהגדרות. ניהול נקודות דרך ה-API (webhooks:write) כלול בתוכניות בתשלום.

Webhooks: קטלוג האירועים

24 סוגי אירועים, ועוד webhook.test שנשלח רק כשמבקשים בדיקה. כל נקודה נרשמת לרשימת אירועים משלה, ואפשר לצמצם עוד עם filters (מקורות פגישה וחדרים). אותה רשימה זמינה גם ב-GET /webhook-event-types.

שמות חלופיים: נרשמתם בשם החלופי? השדה type במשלוח יהיה השם החלופי. נרשמתם לשני השמות? יגיע משלוח אחד, בשם הראשי.

קטלוג האירועים
אירועמתי הוא נשלחשדות ב-data
פגישות
meeting.scheduledפגישה נקבעה לבוט (מהיומן, מקישור או ידנית).object: "meeting"meeting_idsourcescheduled_start_timetitle
meeting.bot_status_changedהבוט מצטרף, ממתין בלובי, לא אושר או הוצא מהפגישה.object: "meeting"meeting_idbot_statusprevious_status
meeting.startedההקלטה התחילה.object: "meeting"meeting_idstart_time
meeting.endedהפגישה הסתיימה והעיבוד התחיל.object: "meeting"meeting_idend_timeduration_seconds
meeting.failedהפגישה הסתיימה בלי הקלטה (נכשלה, בוטלה או שהבוט לא אושר).object: "meeting"meeting_idstatusfailure_category
meeting.deletedפגישה נמחקה. מחקו גם את העותק אצלכם.object: "meeting"meeting_id
הקלטות, תמלולים וסיכומים
recording.readyההקלטה נשמרה ואפשר להוריד אותה.object: "recording"meeting_idrecording_idduration_seconds
transcript.readyשם חלופיmeeting.transcript_readyתמלול מוכן.object: "transcript"meeting_idtranscript_idlanguagesegment_count
summary.readyשם חלופיmeeting.initial_summary_readyהסיכום הראשון של פגישה מוכן.object: "summary"meeting_idsummary_iddocument_idslanguagecounts
summary.updatedסיכום נוצר מחדש או נערך.object: "summary"meeting_idsummary_idedited
action_items.createdמשימות לביצוע מפגישה או משיחה נוספו למשימות.object: "action_items"meeting_idtask_idscount
שיחות טלפון
call.transcript_readyתמלול של שיחת טלפון מוכן.object: "call"call_idmeeting_idtranscript_id
call.summarizedשיחת טלפון סוכמה.object: "call"call_idmeeting_idsummary_id
משימות
task.createdמשימה נוצרה.object: "task"task_idstatus
task.updatedמשימה השתנתה (כותרת, סטטוס, תאריך יעד או פריטים).object: "task"task_idstatuschanged
task.deletedמשימה נמחקה.object: "task"task_id
קישורים ציבוריים
share.createdנוצר קישור ציבורי לפגישה או לחדר.object: "share"share_idresource
share.revokedקישור ציבורי בוטל.object: "share"share_idresource
חדרים
room.createdחדר נוצר.object: "room"room_id
room.updatedשם החדר או ההגדרות שלו השתנו.object: "room"room_id
room.archivedחדר הועבר לארכיון.object: "room"room_id
room.meeting_addedפגישה נוספה לחדר.object: "room"room_idmeeting_id
room.meeting_removedפגישה הוסרה מחדר.object: "room"room_idmeeting_id
העלאות
upload.failedלא הצלחנו לעבד הקלטה שהועלתה.object: "upload"upload_idreason
מערכת
webhook.testבדיקה בלבדאירוע בדיקה, נשלח רק מההגדרות או מנקודת הבדיקה.object: "webhook"endpoint_id

אירועים של פגישה או משימה כוללים גם data.links.api ו-data.links.app.

Webhooks: מבנה המשלוח

כל משלוח הוא POST עם גוף JSON ב-UTF-8. המעטפה זהה בכל האירועים; רק data משתנה. המטען רזה בכוונה: מזהים, סטטוס ומספרים — בלי טקסט של תמלול או סיכום, בלי כתובות מייל ובלי קישורי שיתוף.

summary.ready, כפי שהשרת שלכם מקבל אותו
POST /mesakem HTTP/1.1
Host: hooks.example.com
Content-Type: application/json
User-Agent: Mesakem-Webhooks/1.0
webhook-id: msg_1a2b3c4d5e6f708192a3b4c5d6e7f809
webhook-timestamp: 1792317141
webhook-signature: v1,hPEWJKsYRZkotC6qTrqona6rJhYw7hL1L0LA3CTlWD8=

{
  "id": "msg_1a2b3c4d5e6f708192a3b4c5d6e7f809",
  "type": "summary.ready",
  "api_version": "2026-10",
  "created_at": "2026-10-18T09:52:20.000Z",
  "workspace_id": "workspace_1a2b3c4d",
  "data": {
    "object": "summary",
    "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
    "summary_id": "summary_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
    "document_ids": [
      "doc_sum_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
      "doc_act_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
      "doc_dec_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e"
    ],
    "language": "he",
    "counts": { "action_items": 5, "decisions": 2 },
    "links": {
      "api": "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/summary",
      "app": "https://mesakem.com/dashboard/meeting/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b"
    }
  }
}

שדות המעטפה

שדות המעטפה
שדהמשמעות
idמזהה ההודעה, זהה לכותרת webhook-id. נשאר זהה בניסיונות חוזרים ובשליחה חוזרת.
typeשם האירוע, או השם החלופי אם נרשמתם בו.
api_versionגרסת המבנה: 2026-10.
created_atמתי האירוע קרה (ISO 8601, UTC). מיינו לפיו, לא לפי סדר ההגעה.
workspace_idאזור העבודה של האירוע.
data.objectסוג המשאב: meeting, summary, task…
data.linksapi — כתובת ה-API לפרטים המלאים; app — הדף בדשבורד.

כותרות

כותרות
כותרתמשמעות
webhook-idmsg_… — המפתח שלכם למניעת כפילויות
webhook-timestampשניות Unix של הניסיון הזה
webhook-signaturev1,<base64> — שתי חתימות, מופרדות ברווח, בזמן החלפת סוד
Content-Typeapplication/json
User-AgentMesakem-Webhooks/1.0
X-Webhook-Signaturesha256=<hex> — רק בחתימה הפשוטה (simple_hmac)

Webhooks: אימות חתימות

כל משלוח חתום לפי Standard Webhooks — אותו תקן ש-Svix ואחרים משתמשים בו — כך שאפשר להשתמש בספרייה מוכנה. בלי ספרייה, אלה הצעדים:

  1. קחו את הגוף הגולמי, בדיוק כפי שהגיע — לפני פענוח JSON.

  2. דחו בקשה ש-webhook-timestamp שלה רחוק ביותר מ-5 דקות מהשעון שלכם (הגנה מפני שידור חוזר).

  3. חשבו HMAC-SHA256 על <webhook-id>.<webhook-timestamp>.<body> עם הסוד אחרי פענוח base64 (בלי whsec_), וקודדו את התוצאה ב-base64.

  4. השוו, בהשוואה בזמן קבוע, לכל ערך v1,… בכותרת webhook-signature. מספיקה התאמה אחת.

import express from "express";
import { Webhook } from "standardwebhooks";              // npm i standardwebhooks

const wh = new Webhook(process.env.MESAKEM_WEBHOOK_SECRET); // whsec_…
const app = express();

// express.raw: verify the body exactly as sent, BEFORE any JSON parsing
app.post("/mesakem/webhook", express.raw({ type: "application/json" }), async (req, res) => {
  let event;
  try {
    event = wh.verify(req.body, req.headers);           // signature + 5-minute window
  } catch {
    return res.status(400).end();
  }
  if (await seen(req.headers["webhook-id"])) return res.status(204).end(); // at least once: dedupe
  await queue.add(event);                               // answer fast, work later
  res.status(204).end();
});

החלפת סוד בלי הפסקה

החלפה (בהגדרות או ב-POST /webhooks/{endpoint_id}/rotate-secret) מחזירה סוד חדש שחותם מיד. במשך 24 שעות כל משלוח נושא שתי חתימות — החדשה ואחריה הישנה — ולכן קוד שבודק כל חתימה ממשיך לעבוד עד שתעדכנו את הסוד.

חתימה פשוטה (HMAC)

למקבל שלא יכול לאמת Standard Webhooks: נקודה שהוגדרה עם signature_format: "simple_hmac" מקבלת גם X-Webhook-Signature: sha256=<hex> — HMAC-SHA256 על הגוף בלבד, עם מחרוזת הסוד המלאה (כולל whsec_) כמפתח. לכותרת הזו אין חותמת זמן ואין לה חפיפה בהחלפת סוד, ולכן עדיף לעבור לאימות הרגיל כשאפשר.

import { createHmac, timingSafeEqual } from "node:crypto";

// Only for endpoints with signature_format "simple_hmac":
// X-Webhook-Signature: sha256=<hex HMAC-SHA256 of the raw body, keyed with the FULL secret string>
export function verifySimpleHmac(rawBody, headers, secret = process.env.MESAKEM_WEBHOOK_SECRET) {
  const expected = Buffer.from(`sha256=${createHmac("sha256", secret).update(rawBody).digest("hex")}`);
  const given = Buffer.from(String(headers["x-webhook-signature"] ?? ""));
  return given.length === expected.length && timingSafeEqual(given, expected);
}

וקטור בדיקה

בדקו את הקוד שלכם מול הערכים האלה (הגוף הוא הבתים המדויקים, בשורה אחת). חותמת הזמן ישנה, אז כבו לרגע את בדיקת 5 הדקות או העבירו שעון משלכם.

וקטור בדיקה
{
  "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
  "webhook-id": "msg_0f1e2d3c4b5a69788796a5b4c3d2e1f0",
  "webhook-timestamp": "1792314000",
  "body": "{\"id\":\"msg_0f1e2d3c4b5a69788796a5b4c3d2e1f0\",\"type\":\"webhook.test\",\"api_version\":\"2026-10\",\"created_at\":\"2026-10-18T09:00:00.000Z\",\"workspace_id\":\"workspace_1a2b3c4d\",\"data\":{\"object\":\"webhook\",\"endpoint_id\":\"whk_3c2b1a0f9e8d7c6b5a493827161504f3\"}}",
  "webhook-signature": "v1,BTWmnJ208A8o6942h9e4GevByejb0CwCw/lva2zO6jM=",
  "X-Webhook-Signature": "sha256=42538b7323812ccd84b1dba444c3dfe2f769ecda320fa7d7e8fdbebf0e2cf1e2"
}

Webhooks: ניסיונות חוזרים, כשלונות והשבתה

תשובת 2xx תוך 10 שניות היא הצלחה. כל דבר אחר הוא ניסיון שנכשל, והתשובה שלכם קובעת אם ננסה שוב:

ניסיונות חוזרים, כשלונות והשבתה
התשובה שלכםמה קורה
2xxהצלחה (אם הגיעה תוך 10 שניות).
5xx · 408 · timeout · networkננסה שוב לפי הלוח.
429 · 503 + Retry-Afterננסה שוב, ונחכה לפחות לפי Retry-After (עד שעה).
410 Goneהנקודה מושבתת מיד, והמשלוחים שממתינים לה מבוטלים.
3xxכשלון בלי ניסיון חוזר — לא עוקבים אחרי הפניות. הגדירו את הכתובת הסופית.
4xxכל 4xx אחר: כשלון בלי ניסיון חוזר. אפשר לשלוח שוב מיומן המשלוחים.

לוח הניסיונות

לוח הניסיונות
ניסיוןמתי
1מיד
210 שניות אחרי הקודם
3דקה אחרי הקודם
45 דקות אחרי הקודם
530 דקות אחרי הקודם
6שעתיים אחרי הקודם
76 שעות אחרי הקודם
812 שעות אחרי הקודם
924 שעות אחרי הקודם

לכל המתנה נוסף פיזור אקראי של ±10%. אחרי הניסיון ה-9 (כ-45 שעות) המשלוח נשאר failed ביומן, ומשם אפשר לשלוח אותו שוב.

השבתה אוטומטית

נקודה שנכשלה 50 פעמים ברצף, לאורך 3 ימים לפחות, מושבתת אוטומטית, והבעלים שלה מקבלים מייל. אחרי התיקון, הפעילו אותה מחדש בהגדרות או ב-PATCH עם enabled: true — ומונה הכשלונות מתאפס.

לפחות פעם אחת, בלי סדר מובטח

כל אירוע יגיע לפחות פעם אחת, ולפעמים יותר (למשל אם עניתם 2xx אבל החיבור נפל). הסדר לא מובטח: ניסיון חוזר של אירוע ישן יכול להגיע אחרי אירוע חדש.

Webhooks: יומן משלוחים ושליחה חוזרת

כל משלוח נשמר 30 יום, עם המצב שלו, מספר הניסיונות, קוד הסטטוס האחרון, זמן התגובה ו-512 הבתים הראשונים מהתשובה שלכם. רואים אותו בהגדרות או ב-GET /webhooks/{endpoint_id}/deliveries, מהחדש לישן.

שליחה חוזרת (POST …/deliveries/{delivery_id}/redeliver, תשובה 202) פותחת סדרת ניסיונות חדשה למשלוח שהסתיים — עם אותו webhook-id, כך שמנגנון מניעת הכפילויות שלכם מזהה אותו.

# The last 30 days, newest first
curl "https://mesakem.com/api/v1/webhooks/whk_…/deliveries?limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

# Send a finished delivery again — same webhook-id — answers 202 Accepted
curl -X POST "https://mesakem.com/api/v1/webhooks/whk_…/deliveries/whd_…/redeliver" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
מצב
מצבמשמעות
pendingממתין לניסיון הראשון
deliveringנשלח עכשיו
retry_scheduledנכשל; הניסיון הבא ב-next_attempt_at
succeededהתקבלה תשובת 2xx
failedנגמרו הניסיונות, או תשובה שלא מנסים אחריה שוב — אפשר לשלוח שוב
cancelledבוטל, למשל כי הנקודה הושבתה או שהגישה לפגישה בוטלה

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

ענו מהר, עבדו אחר כך

אמתו את החתימה, שימו את האירוע בתור וענו 2xx מיד. טיפול שנמשך יותר מ-10 שניות נחשב כשלון ויישלח שוב.

סננו כפילויות לפי webhook-id

המשלוח הוא לפחות פעם אחת. שמרו את webhook-id לכמה ימים ודלגו על מזהה שכבר ראיתם — ניסיונות חוזרים ושליחה חוזרת משתמשים באותו מזהה.

סדר לפי created_at

אירועים יכולים להגיע שלא לפי הסדר. השוו created_at (או updated_at של המשאב ב-API) במקום לסמוך על סדר ההגעה.

פרטים מ-data.links.api

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

מחקו עותקים

על meeting.deleted ו-task.deleted מחקו את מה ששמרתם. פגישה שנמחקה מחזירה 404 ב-API מיד.

ענו 410 כשסיימתם

מקבל שיצא משימוש יכול לענות 410 — הנקודה מושבתת מיד ולא נמשיך לנסות.

Webhooks: אבטחה

  • https בלבד, בפורט 443 או 8443, לשרת ציבורי. כתובות פרטיות, מקומיות (loopback), link-local ושל שירותי מטא-דאטה בענן נחסמות כששומרים את הכתובת — ושוב בכל שליחה, ברגע החיבור, כך ש-DNS rebinding לא יגיע לרשת פנימית.
  • לא עוקבים אחרי הפניות (3xx). הגדירו את הכתובת הסופית.
  • מטען רזה: מזהים, סטטוס ומספרים. אין בו טקסט של תמלול או סיכום, כתובות מייל או קישורי שיתוף.
  • לפני כל שליחה בודקים שוב שלבעלי הנקודה עדיין יש גישה לפגישה. אם הגישה הסתיימה, שום דבר לא נשלח.
  • הסוד לחתימה נשמר מוצפן ומוצג פעם אחת. אפשר להחליף אותו מתי שרוצים, עם 24 שעות של חפיפה.
  • רק בעלי הנקודה רואים ומשנים אותה — גם דרך ה-API.

Webhooks: Webhooks לפי תוכנית

ניסיוןPro וארגונים
נקודות Webhook1עד 10 לאדם
ניהול הנקודותבהגדרותבהגדרות וב-API (webhooks:write)
קריאת נקודות ויומנים ב-API (webhooks:read)כלולכלול
כל האירועים, חתימה, ניסיונות חוזרים ויומן משלוחיםכלולכלול

Webhooks: בלי קוד: Zapier

האינטגרציה של מסכם ל-Zapier בנויה על אותם webhooks: טריגרים מיידיים כמו New Summary ו-New Action Item, וחיפוש של פגישה או משימה (Find Meeting, Find Task), שמתחברים לכלים שאתם כבר עובדים איתם בלי שורת קוד. היא פרטית: כל מי שמחזיק בקישור ההזמנה יכול להוסיף אותה לחשבון ה-Zapier שלו.

  1. פותחים את קישור ההזמנה ומוסיפים את Mesakem לחשבון ה-Zapier.

  2. יוצרים מפתח API בהגדרות של מסכם. לטריגרים צריך את ההרשאה webhooks:write (ניהול webhooks), בתוכנית בתשלום.

  3. ב-Zapier בוחרים ב-Mesakem, מדביקים את המפתח ובונים Zap. כשמפעילים אותו נוצרת בשבילו נקודת webhook אחת, וכשמכבים אותו היא נמחקת.

Webhooks: בלי קוד: n8n

צומת קהילתי (community node) של מסכם ל-n8n בהתקנה עצמית (self-hosted): טריגר מיידי על אותם webhooks, ופעולות על ה-API. החבילה מפורסמת ב-npm עם provenance, והקוד שלה ב-GitHub.

  1. ב-n8n פותחים Settings ← Community Nodes ← Install.

  2. מדביקים את שם החבילה n8n-nodes-mesakem ומתקינים.

  3. יוצרים מפתח API בהגדרות של מסכם, ובאישורי ההתחברות (Credentials) של n8n מוסיפים Mesakem API ומדביקים אותו.

החבילהn8n-nodes-mesakem

מה יש בצומת

מה יש בצומת
חלקמה הוא עושה
טריגר · Mesakem Triggerמתחיל תהליך ברגע שמשהו קורה במסכם: סיכום מוכן, פגישה הסתיימה, תמלול מוכן, משימה נוצרה או השתנתה, ועוד, מכל 24 סוגי האירועים. הפרטים נמשכים לפי מזהה, בשתי בקשות API לכל היותר.
פגישות · MeetingGet, Get Many, Get Summary, Get Transcript, Get Upcoming
משימות · TaskGet, Get Many, Create, Update, Delete
הבוט · NotetakerSend, Schedule, Cancel: שליחה לקישור של פגישה, תזמון לפגישה מהיומן, או ביטול
מסמכים · DocumentGet: המסמך ב-Markdown, ב-HTML, כטקסט או כ-JSON
החשבון · AccountGet: המפתח, המשתמש, התוכנית, ההרשאות והמגבלות

צריך מפתח API של מסכם. טריגרים דורשים מנוי בתשלום: הצומת רושם את ה-webhook שלו בעצמו, ולשם כך צריך את webhooks:write. כדי לקבל אירועים, ה-n8n שלכם צריך כתובת https ציבורית.

חדרים

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

  • אין מחיקה סופית של חדר: DELETE /rooms/{id} מעביר לארכיון, ו-PATCH עם archived: false משחזר. הפגישות עצמן לא משתנות.
  • GET /rooms/{id}/insights מחזיר רק מה שכבר קיים: ההחלטות שבסיכום של כל פגישה, וניתוחים שנעשו בדשבורד. הקריאה לא מייצרת שום ניתוח חדש.
  • קישור ציבורי לחדר נוצר בדשבורד, שם בוחרים אילו פגישות יוצגו בו. ב-API אפשר לראות אותו ולבטל אותו.
curl -X POST "https://mesakem.com/api/v1/rooms" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name": "Acme pilot", "client_name": "Acme"}'

curl -X PUT "https://mesakem.com/api/v1/rooms/$ROOM_ID/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

שיחות טלפון

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

  • מזהה שיחה מתחיל ב-call_. שיחה שיצרה פגישה מופיעה גם ב-GET /meetings (מקור phone), ו-meeting_id מקשר ביניהן.
  • השיחות פתוחות בכל התוכניות.
curl "https://mesakem.com/api/v1/calls?limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

curl "https://mesakem.com/api/v1/calls/$CALL_ID/summary?format=markdown" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

תבניות סיכום

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

  • התבנית נשמרת בדיוק כפי ששלחתם: שם עד 120 תווים, הוראות בין 20 ל-12,000 תווים, לא בשם של תבנית מובנית. עד 40 תבניות פעילות לכל סוג (פגישות ושיחות).
  • תבניות מובנות לקריאה בלבד, אבל אפשר לקבוע אותן כברירת מחדל.

לנסח עם ה-AI שלכם, ולשמור כאן

אפשר לבקש מכל עוזר AI שאתם עובדים איתו לנסח תבנית, ולשלוח את התוצאה ל-POST /templates. מסכם לא מפעיל AI על התבנית: היא נבדקת רק לפי הכללים שלמעלה ונשמרת כמו שהיא. בקשה לדוגמה לעוזר:

לנסח עם ה-AI שלכם, ולשמור כאן
נסח לי תבנית סיכום של מסכם לשיחות מכירה עם לקוחות חדשים. החזר JSON עם שני שדות: name (עד 120 תווים) ו-instructions (הוראות ברורות, בעברית, עד 12,000 תווים). בהוראות: מה לסכם, אילו סעיפים (צרכים, התנגדויות, תקציב, צעדים הבאים עם אחראי ותאריך), טון ענייני ואורך של עמוד לכל היותר.
curl -X POST "https://mesakem.com/api/v1/templates" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"type": "meeting", "name": "Discovery call", "instructions": "Summarize as a discovery call: needs, objections, budget, next steps with owner and date."}'

מדריך נקודות קצה

נוצר אוטומטית ממסמך ה-OpenAPI 3.1: קריאה (GET) וכתיבה (POST, PUT, PATCH, DELETE). כל פעולת כתיבה מציינת את ההרשאה שהיא צריכה.

המפתח שלכם

GET/meכל מפתח

המפתח, הבעלים, אזור העבודה, התוכנית והמגבלות

פקודה אחת למסד הנתונים. מתאים לבדיקה שהמפתח תקין.

curl "https://mesakem.com/api/v1/me" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "api_key_context",
  "key": {
    "id": "key_3f2a9c0d4b5e6f708192a3b4c5d6e7f8",
    "name": "HubSpot sync",
    "display": "msk_live_AbC1…wxYz",
    "scopes": [
      "meetings:read",
      "summaries:read"
    ],
    "created_at": "2026-10-17T08:00:00.000Z",
    "expires_at": "2027-10-17T08:00:00.000Z"
  },
  "user": {
    "id": "user_9b8c7d6e",
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "workspace": {
    "id": "workspace_1a2b3c4d",
    "kind": "personal",
    "plan": "full",
    "organization": null
  },
  "limits": {
    "requests_per_minute": 60,
    "requests_per_day": 20000
  }
}

פגישות, תמלולים וסיכומים

GET/meetingsmeetings:read

רשימת פגישות

מהחדשה לישנה כברירת מחדל. לסנכרון מצטבר העבירו updated_since: התוצאות יגיעו בסדר עולה של updated_at. שמרו את ה-updated_at האחרון ושלחו If-None-Match. עדיף כך (לכל היותר פעם ב-5 דקות) מאשר לקרוא הכול מחדש.

פרמטרים
פרמטריםסוגהערות
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
statuscompleted | processing | scheduled | failed
fromdate-timeISO 8601 with offset, or YYYY-MM-DD (00:00 UTC).
todate-time
updated_sincedate-time
orderrecent | updated
expandstringComma-separated: participants, documents.
qstringKeyword search: every word must match (prefix match for meetings). Needs search:read.
curl "https://mesakem.com/api/v1/meetings?limit=25&updated_since=2026-10-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
      "object": "meeting",
      "title": "פגישת היכרות — אקמה",
      "status": "completed",
      "status_detail": "summarized",
      "source": "zoom",
      "kind": "live_meeting",
      "language": "he",
      "start_time": "2026-10-15T09:00:12.000Z",
      "end_time": "2026-10-15T09:47:40.000Z",
      "duration": 2848,
      "scheduled_start_time": "2026-10-15T09:00:00.000Z",
      "scheduled_end_time": "2026-10-15T10:00:00.000Z",
      "has_transcript": true,
      "has_recording": true,
      "has_summary": true,
      "summary_id": "summary_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
      "created_by_you": true,
      "app_url": "https://mesakem.com/dashboard/meeting/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
      "participants": [
        {
          "name": "Dana Levi",
          "email": "dana@acme.co.il",
          "company": "acme.co.il",
          "organizer": true
        }
      ],
      "created_at": "2026-10-15T08:58:01.000Z",
      "updated_at": "2026-10-15T09:52:18.000Z"
    }
  ],
  "next_cursor": "eyJ2IjoxLCJwIjp7InMiOiIyMDI2LTEwLTE1VDA5OjAwOjEyLjAwMDAwMFoifX0.Xn3k2l1PqR8sT6uV0wYz4aBcDeFgHiJk",
  "has_more": true
}
GET/meetings/upcomingcalendar:read

פגישות קרובות מהיומן שלכם

חלון ברירת המחדל: 336 השעות הבאות (14 ימים). within_hours עד 8760.

פרמטרים
פרמטריםסוגהערות
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
within_hoursinteger (1–8760)ברירת מחדל 336
fromdate-timeISO 8601 with offset, or YYYY-MM-DD (00:00 UTC).
todate-time
curl "https://mesakem.com/api/v1/meetings/upcoming?within_hours=48" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "cal_evt_Qm9pZ2h0LXNlcmllcy0x",
      "object": "upcoming_meeting",
      "title": "סנכרון שבועי",
      "start_time": "2026-10-18T07:00:00.000Z",
      "end_time": "2026-10-18T07:30:00.000Z",
      "meeting_url": "https://zoom.us/j/1234567890",
      "source": "zoom",
      "organizer": {
        "email": "dana@acme.co.il"
      },
      "bot": {
        "decision": "will_join",
        "override": null,
        "reason": "calendar_auto_record"
      },
      "series_id": "8d7c6b5a",
      "created_at": "2026-10-10T12:00:00.000Z",
      "updated_at": "2026-10-16T12:00:00.000Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
GET/meetings/{meeting_id}meetings:read

פגישה אחת

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
expandstringComma-separated: participants, documents.
curl "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "object": "meeting",
  "title": "פגישת היכרות — אקמה",
  "status": "completed",
  "status_detail": "summarized",
  "source": "zoom",
  "kind": "live_meeting",
  "language": "he",
  "start_time": "2026-10-15T09:00:12.000Z",
  "end_time": "2026-10-15T09:47:40.000Z",
  "duration": 2848,
  "scheduled_start_time": "2026-10-15T09:00:00.000Z",
  "scheduled_end_time": "2026-10-15T10:00:00.000Z",
  "has_transcript": true,
  "has_recording": true,
  "has_summary": true,
  "summary_id": "summary_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
  "created_by_you": true,
  "app_url": "https://mesakem.com/dashboard/meeting/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "participants": [
    {
      "name": "Dana Levi",
      "email": "dana@acme.co.il",
      "company": "acme.co.il",
      "organizer": true
    }
  ],
  "created_at": "2026-10-15T08:58:01.000Z",
  "updated_at": "2026-10-15T09:52:18.000Z"
}
PATCH/meetings/{meeting_id}meetings:write

שינוי שם של פגישה

דורש meetings:write, שלא נכלל באף ערכה מוכנה: יש לסמן אותו במפורש. לבעלי הפגישה בלבד.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
title · חובהstring | nullnull או "" מחזירים את השם המקורי.עד 180 תווים
curl -X PATCH "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Discovery call — Acme (renamed)"
  }'
תשובה לדוגמה
{
  "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "object": "meeting",
  "title": "פגישת היכרות — אקמה (מעודכן)",
  "status": "completed"
}
DELETE/meetings/{meeting_id}→ 204 No Contentmeetings:write

מחיקת פגישה

סופית מבחינתכם, כמו בדשבורד (אין שחזור). דורש meetings:write, שלא נכלל באף ערכה מוכנה. פגישה שהבוט נמצא בה מחזירה 409 meeting_in_progress: קודם DELETE /meetings/{id}/bot.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
GET/meetings/{meeting_id}/participantsmeetings:read

מוזמנים, דוברים בתמלול ונוכחות (ליוצר הפגישה בלבד)

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/participants" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "participants",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "invitees": [
    {
      "name": "Dana Levi",
      "email": "dana@acme.co.il",
      "organizer": true,
      "company": "acme.co.il"
    }
  ],
  "speakers": [
    {
      "id": "spk_1",
      "name": "Dana Levi"
    },
    {
      "id": "spk_2",
      "name": "דובר 1"
    }
  ],
  "attendance_available": false,
  "attendance": null
}
GET/meetings/{meeting_id}/transcripttranscripts:read

תמלול (json, text, vtt, srt)

format=json מתחלק לעמודים לפי קטעים (limit עד 2000, כ-512KB לעמוד). פורמטי טקסט מחזירים את כל התמלול. תומך ב-If-None-Match ומחזיר 304 אחרי בדיקת גרסה זולה.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
formatjson | text | vtt | srt
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
curl "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/transcript?format=json&limit=500" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "transcript",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "transcript_id": "transcript_7e6d5c4b-3a29-4180-9f8e-7d6c5b4a3928",
  "language": "he",
  "mode": "segments",
  "total_segments": 412,
  "speakers": [
    {
      "id": "spk_1",
      "name": "Dana Levi"
    },
    {
      "id": "spk_2",
      "name": "דובר 1"
    }
  ],
  "segments": [
    {
      "index": 0,
      "speaker_id": "spk_1",
      "start_time": 0.84,
      "end_time": 6.2,
      "text": "בוקר טוב, תודה שהצטרפתם."
    },
    {
      "index": 1,
      "speaker_id": "spk_2",
      "start_time": 6.4,
      "end_time": 11.03,
      "text": "שמחים להיות כאן."
    }
  ],
  "next_cursor": "eyJ2IjoxLCJwIjp7ImEiOjIsInQiOiJ0cmFuc2NyaXB0In19.Qz8xWv7uT6sR5qP4oN3mL2kJ1iH0gF9e",
  "has_more": true,
  "created_at": "2026-10-15T09:49:02.000Z"
}
GET/meetings/{meeting_id}/summarysummaries:read

סיכום (json, markdown, html, text, docx)

תומך ב-If-None-Match ומחזיר 304 אחרי בדיקת גרסה זולה.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
formatjson | markdown | html | text | docx
curl "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/summary?format=markdown" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "summary",
  "id": "summary_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "language": "he",
  "template": {
    "id": "system_detailed_mesakem",
    "name": "מפורט"
  },
  "title": "פגישת היכרות — אקמה",
  "overview": "סקרנו את הצרכים של אקמה ואת לוחות הזמנים.",
  "sections": [
    {
      "kind": "topic",
      "title": "תמחור",
      "body_markdown": "הוסכם לשלוח הצעה עד יום ראשון."
    }
  ],
  "action_items": [
    {
      "text": "לשלוח הצעת מחיר לאקמה"
    }
  ],
  "decisions": [
    {
      "text": "פיילוט של חודש"
    }
  ],
  "open_questions": [
    "מי מאשר את התקציב?"
  ],
  "citations": null,
  "body_markdown": "## תקציר\nסקרנו את הצרכים של אקמה…",
  "body_oversized": false,
  "meeting_description": null,
  "edited": false,
  "structured_stale": false,
  "structured_oversized": false,
  "documents": [
    {
      "id": "doc_sum_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
      "kind": "summary"
    }
  ],
  "created_at": "2026-10-15T09:52:18.000Z",
  "updated_at": "2026-10-15T09:52:18.000Z"
}
GET/meetings/{meeting_id}/recordingrecordings:read

קישור להקלטה ל-5 דקות

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

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/recording" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "recording_link",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "recording_id": "recording_0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
  "status": "ready",
  "recording_url": "https://mesakem.com/api/v1/r/Zm9yLWV4YW1wbGUtb25seQ",
  "expires_at": "2026-10-17T08:05:00.000Z",
  "format": "mp4",
  "duration": 2848,
  "created_at": "2026-10-15T09:48:30.000Z"
}
PUT/meetings/upload→ 201 Createduploads:write

העלאת הקלטה קטנה בבקשה אחת (עד 4MB)

הקובץ הוא גוף הבקשה; title ו-language נשלחים ב-query.

פרמטרים
פרמטריםסוגהערות
titlestring
languagestringConversation language, e.g. he, en, auto.
summary_languagehe | en
categorymeeting | callברירת מחדל meeting
filenamestringNeeded for video/quicktime; otherwise derived from Content-Type.

גוף הבקשה: הקובץ עצמו. קובץ השמע או הווידאו עצמו, עד 4MB. קבצים גדולים יותר: POST /uploads.

curl -X PUT "https://mesakem.com/api/v1/meetings/upload?title=Support+call&language=he" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: audio/mp4" \
  --data-binary @call.m4a
תשובה לדוגמה · 201 Created
{
  "object": "upload",
  "id": "recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "meeting_id": "run_upload_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "filename": "call.m4a",
  "content_type": "audio/mp4",
  "size_bytes": 3145728,
  "app_url": "https://mesakem.com/dashboard/meeting/run_upload_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "created_at": "2026-10-18T09:00:00.000Z",
  "status": "processing",
  "upload_id": "recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9"
}
GET/meetings/{meeting_id}/permissionsshares:read

עם מי הפגישה משותפת

מסכם משתף רק בקישור ציבורי: ברשימה יש perm_anyone או כלום.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/permissions" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "perm_anyone",
      "object": "permission",
      "recipient": {
        "type": "anyone"
      },
      "role": "read",
      "status": "ready",
      "share_url": "https://mesakem.com/s#Zm9yLWV4YW1wbGU",
      "created_at": "2026-10-18T09:00:00.000Z"
    }
  ],
  "share_url": "https://mesakem.com/s#Zm9yLWV4YW1wbGU",
  "next_cursor": null,
  "has_more": false
}
POST/meetings/{meeting_id}/permissions→ 201 Createdshares:write

יצירת קישור ציבורי לפגישה

recipient {"type":"anyone"}, role read. נמען מסוג user או team מחזיר 422 unsupported_recipient: הפגישות של חברי צוות נשארות פרטיות.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
recipient · חובהobjectרק anyone (קישור ציבורי לקריאה בלבד). נמען user או team מחזיר 422 unsupported_recipient.
role"read"
curl -X POST "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/permissions" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient": {
      "type": "anyone"
    },
    "role": "read"
  }'
תשובה לדוגמה · 201 Created
{
  "id": "perm_anyone",
  "object": "permission",
  "recipient": {
    "type": "anyone"
  },
  "role": "read",
  "status": "ready",
  "share_url": "https://mesakem.com/s#Zm9yLWV4YW1wbGU",
  "created_at": "2026-10-18T09:00:00.000Z"
}
DELETE/meetings/{meeting_id}/permissions/{permission_id}→ 204 No Contentshares:write

ביטול הקישור הציבורי

permission_id הוא perm_anyone. אפשר לקרוא שוב בלי נזק.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
permission_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b/permissions/perm_anyone" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

מסמכים

GET/documents/{document_id}summaries:read

מסמך (סיכום, משימות או החלטות)

מזהים: doc_sum_… (סיכום), doc_act_… (משימות), doc_dec_… (החלטות). docx מוחזר ב-base64.

פרמטרים
פרמטריםסוגהערות
document_id · חובהstringבנתיב
formatjson | markdown | html | text | raw | docx
curl "https://mesakem.com/api/v1/documents/doc_sum_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e?format=markdown" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "doc_act_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e",
  "object": "document",
  "kind": "action_items",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "title": "משימות",
  "format": "markdown",
  "language": "he",
  "content": "# משימות\n\n- לשלוח הצעת מחיר לאקמה\n",
  "created_at": "2026-10-15T09:52:18.000Z",
  "updated_at": "2026-10-15T09:52:18.000Z"
}

משימות

GET/taskstasks:read

רשימת המשימות שלכם

פרמטרים
פרמטריםסוגהערות
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
statusactive | all | open | in_progress | done | snoozed | delegated | cancelledברירת מחדל active
sourcemeeting_summary | manual | agent_chat | call_summary
meeting_idstring
updated_sincedate-time
due_afterdate-time
due_beforedate-time
orderrecent | updated
idsstringGET /tasks: 1 to 50 comma-separated task ids (any status). Only the ones your key can read come back.
qstringKeyword search: every word must match (prefix match for meetings). Needs search:read.
curl "https://mesakem.com/api/v1/tasks?status=active&limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "agent_task_5c1f9a2b",
      "object": "task",
      "privacy": "visible",
      "title": "לשלוח הצעת מחיר לאקמה",
      "description": null,
      "status": "open",
      "source": {
        "type": "meeting_summary",
        "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
        "summary_id": "summary_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e"
      },
      "assignee": {
        "name": "Dana Levi",
        "email": "dana@acme.co.il"
      },
      "due_at": "2026-10-20T09:00:00.000Z",
      "snoozed_until": null,
      "items_count": 2,
      "app_url": "https://mesakem.com/dashboard/tasks",
      "created_at": "2026-10-15T09:52:20.000Z",
      "updated_at": "2026-10-16T07:10:00.000Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
POST/tasks→ 201 Createdtasks:write

יצירת משימה

גוף הבקשה application/json
שדהסוגהערות
title · חובהstringעד 180 תווים
descriptionstring | nullעד 4000 תווים
statusstringאחד מ: openin_progressdonesnoozeddelegatedcancelledברירת מחדל "open"
due_atdate-time | null
assigneeobject | null
itemsarray<string>שורות ברשימת התיוג.≤ 24 פריטים
curl -X POST "https://mesakem.com/api/v1/tasks" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Send Acme the proposal",
    "due_at": "2026-10-20T09:00:00Z",
    "items": [
      "Confirm pricing with finance"
    ]
  }'
תשובה לדוגמה · 201 Created
{
  "id": "agent_task_5c1f9a2b",
  "object": "task",
  "privacy": "visible",
  "title": "לשלוח הצעת מחיר לאקמה",
  "description": null,
  "status": "open",
  "source": {
    "type": "manual"
  },
  "assignee": {
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "due_at": "2026-10-20T09:00:00.000Z",
  "snoozed_until": null,
  "items_count": 1,
  "app_url": "https://mesakem.com/dashboard/tasks",
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z",
  "description_oversized": false,
  "items": [
    {
      "id": "agent_task_item_1",
      "title": "לאשר תמחור מול הכספים",
      "completed": false,
      "position": 1000
    }
  ],
  "items_offset": 0,
  "items_has_more": false
}
GET/tasks/{task_id}tasks:read

משימה עם רשימת התיוג שלה

פרמטרים
פרמטריםסוגהערות
task_id · חובהstringבנתיב
items_limitinteger (1–100)With expand=meetings / calls.
items_offsetinteger (0–)ברירת מחדל 0
curl "https://mesakem.com/api/v1/tasks/agent_task_5c1f9a2b?items_limit=100" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "agent_task_5c1f9a2b",
  "object": "task",
  "privacy": "visible",
  "title": "לשלוח הצעת מחיר לאקמה",
  "description": null,
  "status": "open",
  "source": {
    "type": "meeting_summary",
    "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
    "summary_id": "summary_2b7d0c1e-8f9a-4b3c-9d2e-5f6a7b8c9d0e"
  },
  "assignee": {
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "due_at": "2026-10-20T09:00:00.000Z",
  "snoozed_until": null,
  "items_count": 2,
  "app_url": "https://mesakem.com/dashboard/tasks",
  "created_at": "2026-10-15T09:52:20.000Z",
  "updated_at": "2026-10-16T07:10:00.000Z",
  "description_oversized": false,
  "items": [
    {
      "id": "agent_task_item_1",
      "title": "לאשר תמחור מול הכספים",
      "completed": true,
      "position": 1000
    },
    {
      "id": "agent_task_item_2",
      "title": "לשלוח ב-PDF",
      "completed": false,
      "position": 2000
    }
  ],
  "items_offset": 0,
  "items_has_more": false
}
PATCH/tasks/{task_id}tasks:write

עדכון משימה (כותרת, הערות, סטטוס, תאריך יעד, אחראי)

פרמטרים
פרמטריםסוגהערות
task_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
titlestringעד 180 תווים
descriptionstring | nullעד 4000 תווים
statusstringאחד מ: openin_progressdonesnoozeddelegatedcancelled
due_atdate-time | null
assigneeobject | nullReplaces the assignee; null clears it.
curl -X PATCH "https://mesakem.com/api/v1/tasks/agent_task_5c1f9a2b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "done"
  }'
תשובה לדוגמה
{
  "id": "agent_task_5c1f9a2b",
  "object": "task",
  "privacy": "visible",
  "title": "לשלוח הצעת מחיר לאקמה",
  "description": null,
  "status": "in_progress",
  "source": {
    "type": "manual"
  },
  "assignee": {
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "due_at": "2026-10-20T09:00:00.000Z",
  "snoozed_until": null,
  "items_count": 1,
  "app_url": "https://mesakem.com/dashboard/tasks",
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z",
  "description_oversized": false,
  "items": [
    {
      "id": "agent_task_item_1",
      "title": "לאשר תמחור מול הכספים",
      "completed": false,
      "position": 1000
    }
  ],
  "items_offset": 0,
  "items_has_more": false
}
DELETE/tasks/{task_id}tasks:write

ביטול משימה

במסכם אין מחיקה מוחלטת של משימה: היא נשמרת בסטטוס cancelled.

פרמטרים
פרמטריםסוגהערות
task_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/tasks/agent_task_5c1f9a2b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "agent_task_5c1f9a2b",
  "object": "task",
  "privacy": "visible",
  "title": "לשלוח הצעת מחיר לאקמה",
  "description": null,
  "status": "cancelled",
  "source": {
    "type": "manual"
  },
  "assignee": {
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "due_at": "2026-10-20T09:00:00.000Z",
  "snoozed_until": null,
  "items_count": 1,
  "app_url": "https://mesakem.com/dashboard/tasks",
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z",
  "description_oversized": false,
  "items": [
    {
      "id": "agent_task_item_1",
      "title": "לאשר תמחור מול הכספים",
      "completed": false,
      "position": 1000
    }
  ],
  "items_offset": 0,
  "items_has_more": false
}
POST/tasks/{task_id}/items→ 201 Createdtasks:write

הוספת שורה לרשימת התיוג

פרמטרים
פרמטריםסוגהערות
task_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
title · חובהstringעד 180 תווים
curl -X POST "https://mesakem.com/api/v1/tasks/agent_task_5c1f9a2b/items" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Attach the PDF"
  }'
תשובה לדוגמה · 201 Created
{
  "id": "agent_task_5c1f9a2b",
  "object": "task",
  "privacy": "visible",
  "title": "לשלוח הצעת מחיר לאקמה",
  "description": null,
  "status": "open",
  "source": {
    "type": "manual"
  },
  "assignee": {
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "due_at": "2026-10-20T09:00:00.000Z",
  "snoozed_until": null,
  "items_count": 2,
  "app_url": "https://mesakem.com/dashboard/tasks",
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z",
  "description_oversized": false,
  "items": [
    {
      "id": "agent_task_item_1",
      "title": "לאשר תמחור מול הכספים",
      "completed": false,
      "position": 1000
    },
    {
      "id": "agent_task_item_2",
      "title": "לשלוח ב-PDF",
      "completed": false,
      "position": 2000
    }
  ],
  "items_offset": 0,
  "items_has_more": false,
  "item": {
    "id": "agent_task_item_2",
    "title": "לשלוח ב-PDF",
    "completed": false,
    "position": 2000
  }
}
PATCH/tasks/{task_id}/items/{item_id}tasks:write

סימון או ביטול סימון של שורה

פרמטרים
פרמטריםסוגהערות
task_id · חובהstringבנתיב
item_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
completed · חובהboolean
curl -X PATCH "https://mesakem.com/api/v1/tasks/agent_task_5c1f9a2b/items/agent_task_item_2" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "completed": true
  }'
תשובה לדוגמה
{
  "id": "agent_task_5c1f9a2b",
  "object": "task",
  "privacy": "visible",
  "title": "לשלוח הצעת מחיר לאקמה",
  "description": null,
  "status": "open",
  "source": {
    "type": "manual"
  },
  "assignee": {
    "name": "Dana Levi",
    "email": "dana@acme.co.il"
  },
  "due_at": "2026-10-20T09:00:00.000Z",
  "snoozed_until": null,
  "items_count": 1,
  "app_url": "https://mesakem.com/dashboard/tasks",
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z",
  "description_oversized": false,
  "items": [
    {
      "id": "agent_task_item_1",
      "title": "לאשר תמחור מול הכספים",
      "completed": true,
      "position": 1000
    }
  ],
  "items_offset": 0,
  "items_has_more": false,
  "item": {
    "id": "agent_task_item_1",
    "title": "לאשר תמחור מול הכספים",
    "completed": true,
    "position": 1000
  }
}
DELETE/tasks/{task_id}/items/{item_id}→ 204 No Contenttasks:write

הסרת שורה מרשימת התיוג

פרמטרים
פרמטריםסוגהערות
task_id · חובהstringבנתיב
item_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/tasks/agent_task_5c1f9a2b/items/agent_task_item_2" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

צוות

GET/team/membersteam:read

חברי הצוות בארגון (לבעלים ולמנהלים)

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

פרמטרים
פרמטריםסוגהערות
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
curl "https://mesakem.com/api/v1/team/members?limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "team_id": "org_5e4d3c2b",
  "data": [
    {
      "id": "user_1f2e3d4c",
      "name": "Noa Cohen",
      "email": "noa@acme.co.il",
      "role": "member"
    }
  ],
  "next_cursor": null,
  "has_more": false
}

Webhooks

GET/webhookswebhooks:read

רשימת נקודות ה-Webhook שלכם

curl "https://mesakem.com/api/v1/webhooks" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "object": "webhook_endpoint",
      "id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
      "url": "https://hooks.acme.co.il/mesakem",
      "description": "CRM sync",
      "events": [
        "summary.ready",
        "action_items.created",
        "meeting.deleted"
      ],
      "filters": {},
      "signature_format": "standard",
      "enabled": true,
      "status": "healthy",
      "disabled_reason": null,
      "disabled_at": null,
      "secret_hint": "Qx9k",
      "secret_rotation_ends_at": null,
      "failure_streak": 0,
      "last_attempt_at": "2026-10-18T09:52:21.000Z",
      "last_success_at": "2026-10-18T09:52:21.000Z",
      "last_status": 200,
      "created_at": "2026-10-18T08:00:00.000Z",
      "updated_at": "2026-10-18T08:00:00.000Z"
    }
  ],
  "limit": 10,
  "has_more": false,
  "next_cursor": null
}
POST/webhooks→ 201 Createdwebhooks:write

יצירת נקודת Webhook

מחזיר את הסוד לחתימה (whsec_…) פעם אחת בלבד. הכתובת חייבת להיות https בשרת ציבורי; כתובות פרטיות, מקומיות ושל שירותי מטא-דאטה נחסמות, עכשיו ובכל שליחה.

גוף הבקשה application/json
שדהסוגהערות
url · חובהurihttps בלבד, פורט 443 או 8443, שרת ציבורי.עד 2048 תווים
events · חובהarray<string>1–64 פריטיםשמות אירועים או שמות חלופיים — ראו את הקטלוג
descriptionstringעד 200 תווים
filters.sourcesarray<string>רק פגישות מהמקורות האלה (השדה source של הפגישה).אחד מ: google_meetzoomteamsphoneuploaddesktopemailunknown
filters.room_idsarray<string>רק פגישות בחדרים האלה, ואירועים של החדרים עצמם.≤ 50 פריטים
signature_formatstandard | simple_hmacsimple_hmac שולח גם את הכותרת X-Webhook-Signature, למקבלים שלא יכולים לאמת Standard Webhooks.ברירת מחדל "standard"
enabledbooleanברירת מחדל true
curl -X POST "https://mesakem.com/api/v1/webhooks" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.example.com/mesakem",
    "events": [
      "summary.ready",
      "action_items.created",
      "meeting.deleted"
    ],
    "description": "CRM sync"
  }'
תשובה לדוגמה · 201 Created
{
  "object": "webhook_endpoint",
  "id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "url": "https://hooks.acme.co.il/mesakem",
  "description": "CRM sync",
  "events": [
    "summary.ready",
    "action_items.created",
    "meeting.deleted"
  ],
  "filters": {},
  "signature_format": "standard",
  "enabled": true,
  "status": "healthy",
  "disabled_reason": null,
  "disabled_at": null,
  "secret_hint": "Qx9k",
  "secret_rotation_ends_at": null,
  "failure_streak": 0,
  "last_attempt_at": "2026-10-18T09:52:21.000Z",
  "last_success_at": "2026-10-18T09:52:21.000Z",
  "last_status": 200,
  "created_at": "2026-10-18T08:00:00.000Z",
  "updated_at": "2026-10-18T08:00:00.000Z",
  "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
}
GET/webhooks/{endpoint_id}webhooks:read

נקודת Webhook אחת

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "webhook_endpoint",
  "id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "url": "https://hooks.acme.co.il/mesakem",
  "description": "CRM sync",
  "events": [
    "summary.ready",
    "action_items.created",
    "meeting.deleted"
  ],
  "filters": {},
  "signature_format": "standard",
  "enabled": true,
  "status": "healthy",
  "disabled_reason": null,
  "disabled_at": null,
  "secret_hint": "Qx9k",
  "secret_rotation_ends_at": null,
  "failure_streak": 0,
  "last_attempt_at": "2026-10-18T09:52:21.000Z",
  "last_success_at": "2026-10-18T09:52:21.000Z",
  "last_status": 200,
  "created_at": "2026-10-18T08:00:00.000Z",
  "updated_at": "2026-10-18T08:00:00.000Z"
}
PATCH/webhooks/{endpoint_id}webhooks:write

עדכון נקודת Webhook

שלחו רק את השדות שמשתנים. enabled=true מפעיל מחדש נקודה שהושבתה אחרי כשלונות.

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
גוף הבקשה application/json · שלחו לפחות שדה אחד
שדהסוגהערות
urluriעד 2048 תווים
eventsarray<string>1–64 פריטיםשמות אירועים או שמות חלופיים — ראו את הקטלוג
descriptionstring | nullעד 200 תווים
filters.sourcesarray<string>רק פגישות מהמקורות האלה (השדה source של הפגישה).אחד מ: google_meetzoomteamsphoneuploaddesktopemailunknown
filters.room_idsarray<string>רק פגישות בחדרים האלה, ואירועים של החדרים עצמם.≤ 50 פריטים
signature_formatstandard | simple_hmac
enabledbooleantrue מפעיל מחדש נקודה שהושבתה אחרי כשלונות ומאפס את מונה הכשלונות.
curl -X PATCH "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      "summary.ready",
      "summary.updated",
      "meeting.deleted"
    ],
    "enabled": true
  }'
תשובה לדוגמה
{
  "object": "webhook_endpoint",
  "id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "url": "https://hooks.acme.co.il/mesakem",
  "description": "CRM sync (v2)",
  "events": [
    "summary.ready",
    "action_items.created",
    "meeting.deleted"
  ],
  "filters": {},
  "signature_format": "standard",
  "enabled": true,
  "status": "healthy",
  "disabled_reason": null,
  "disabled_at": null,
  "secret_hint": "Qx9k",
  "secret_rotation_ends_at": null,
  "failure_streak": 0,
  "last_attempt_at": "2026-10-18T09:52:21.000Z",
  "last_success_at": "2026-10-18T09:52:21.000Z",
  "last_status": 200,
  "created_at": "2026-10-18T08:00:00.000Z",
  "updated_at": "2026-10-18T10:00:00.000Z"
}
DELETE/webhooks/{endpoint_id}webhooks:write

מחיקת נקודת Webhook

משלוחים שממתינים לה מבוטלים.

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "webhook_endpoint",
  "id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "deleted": true
}
POST/webhooks/{endpoint_id}/rotate-secretwebhooks:write

החלפת הסוד לחתימה

הסוד החדש חותם מיד; במשך 24 שעות כל משלוח נושא גם את החתימה הישנה, כך שאפשר לעבור בלי הפסקה.

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
curl -X POST "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3/rotate-secret" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "webhook_endpoint",
  "id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "url": "https://hooks.acme.co.il/mesakem",
  "description": "CRM sync",
  "events": [
    "summary.ready",
    "action_items.created",
    "meeting.deleted"
  ],
  "filters": {},
  "signature_format": "standard",
  "enabled": true,
  "status": "healthy",
  "disabled_reason": null,
  "disabled_at": null,
  "secret_hint": "Lm3p",
  "secret_rotation_ends_at": "2026-10-19T10:00:00.000Z",
  "failure_streak": 0,
  "last_attempt_at": "2026-10-18T09:52:21.000Z",
  "last_success_at": "2026-10-18T09:52:21.000Z",
  "last_status": 200,
  "created_at": "2026-10-18T08:00:00.000Z",
  "updated_at": "2026-10-18T08:00:00.000Z",
  "secret": "whsec_Lm3pZx8rW2vT6yQ1nB5kD9fH4jS7aC0eG2iK"
}
POST/webhooks/{endpoint_id}/testwebhooks:write

שליחת אירוע בדיקה עכשיו

שולח webhook.test מיד ומחזיר את הסטטוס, זמן התגובה ו-512 הבתים הראשונים מהתשובה. שום דבר לא נשמר.

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
curl -X POST "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3/test" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "webhook_test",
  "endpoint_id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "message_id": "msg_0f1e2d3c4b5a69788796a5b4c3d2e1f0",
  "delivered": true,
  "status": 200,
  "latency_ms": 162,
  "error": null,
  "response_snippet": "ok"
}
GET/webhooks/{endpoint_id}/deliverieswebhooks:read

יומן משלוחים (30 הימים האחרונים)

מהחדש לישן. כל שורה היא משלוח אחד עם הניסיון האחרון שלו.

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
curl "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3/deliveries?limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "object": "webhook_delivery",
      "id": "whd_9f8e7d6c5b4a39281706f5e4d3c2b1a0",
      "endpoint_id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
      "event_id": "msg_1a2b3c4d5e6f708192a3b4c5d6e7f809",
      "type": "summary.ready",
      "state": "succeeded",
      "attempt": 1,
      "max_attempts": 9,
      "last_status": 200,
      "last_error": null,
      "latency_ms": 184,
      "next_attempt_at": null,
      "response_snippet": "{\"ok\":true}",
      "redelivery_of": null,
      "created_at": "2026-10-18T09:52:20.000Z",
      "completed_at": "2026-10-18T09:52:21.000Z"
    },
    {
      "object": "webhook_delivery",
      "id": "whd_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
      "endpoint_id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
      "event_id": "msg_1a2b3c4d5e6f708192a3b4c5d6e7f809",
      "type": "meeting.ended",
      "state": "retry_scheduled",
      "attempt": 3,
      "max_attempts": 9,
      "last_status": 503,
      "last_error": "http_503",
      "latency_ms": 10000,
      "next_attempt_at": "2026-10-18T09:58:00.000Z",
      "response_snippet": "Service Unavailable",
      "redelivery_of": null,
      "created_at": "2026-10-18T09:52:20.000Z",
      "completed_at": null
    }
  ],
  "has_more": false,
  "next_cursor": null
}
POST/webhooks/{endpoint_id}/deliveries/{delivery_id}/redeliver→ 202 Acceptedwebhooks:write

שליחה חוזרת

סדרת ניסיונות חדשה למשלוח שהסתיים, עם אותו webhook-id (סננו כפילויות לפיו).

פרמטרים
פרמטריםסוגהערות
endpoint_id · חובהstringבנתיב
delivery_id · חובהstringבנתיב
curl -X POST "https://mesakem.com/api/v1/webhooks/whk_3c2b1a0f9e8d7c6b5a493827161504f3/deliveries/whd_9f8e7d6c5b4a39281706f5e4d3c2b1a0/redeliver" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה · 202 Accepted
{
  "object": "webhook_delivery",
  "id": "whd_5e4d3c2b1a0f9e8d7c6b5a4938271605",
  "endpoint_id": "whk_3c2b1a0f9e8d7c6b5a493827161504f3",
  "event_id": "msg_1a2b3c4d5e6f708192a3b4c5d6e7f809",
  "type": "summary.ready",
  "state": "pending",
  "attempt": 0,
  "max_attempts": 9,
  "last_status": null,
  "last_error": null,
  "latency_ms": null,
  "next_attempt_at": null,
  "response_snippet": null,
  "redelivery_of": "whd_9f8e7d6c5b4a39281706f5e4d3c2b1a0",
  "created_at": "2026-10-18T11:00:00.000Z",
  "completed_at": null
}
GET/webhook-event-typeswebhooks:read

קטלוג האירועים

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

curl "https://mesakem.com/api/v1/webhook-event-types" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "object": "webhook_event_type",
      "type": "meeting.scheduled",
      "alias": null,
      "group": "meetings",
      "data_object": "meeting",
      "fields": [
        "meeting_id",
        "source",
        "scheduled_start_time",
        "title"
      ],
      "description": "A meeting was scheduled for the notetaker (calendar, link or manual).",
      "description_he": "פגישה נקבעה לבוט (מהיומן, מקישור או ידנית).",
      "description_en": "A meeting was scheduled for the notetaker (calendar, link or manual)."
    },
    {
      "object": "webhook_event_type",
      "type": "meeting.bot_status_changed",
      "alias": null,
      "group": "meetings",
      "data_object": "meeting",
      "fields": [
        "meeting_id",
        "bot_status",
        "previous_status"
      ],
      "description": "The notetaker is joining, waiting in the lobby, was not admitted or was removed.",
      "description_he": "הבוט מצטרף, ממתין בלובי, לא אושר או הוצא מהפגישה.",
      "description_en": "The notetaker is joining, waiting in the lobby, was not admitted or was removed."
    }
  ],
  "has_more": false,
  "next_cursor": null
}

הבוט

POST/meetings/bot→ 202 Acceptedbot:write

שליחת הבוט לקישור פגישה

דורש bot:write בתוכנית בתשלום. מגבלות קשיחות לכל משתמש ולכל אזור עבודה (לדקה, לשעה וליום) מגינות מפני עלויות שבורחות, ומכסת הפגישות של התוכנית חלה. פגישה שכבר יש בה בוט של מסכם מחזירה 409 meeting_bot_already_active עם ה-meeting_id שלה. שלחו Idempotency-Key כדי שניסיון חוזר לא ישלח בוט שני.

גוף הבקשה application/json
שדהסוגהערות
meeting_url · חובהstringקישור Zoom, Google Meet או Microsoft Teams (אפשר גם להדביק את כל ההזמנה).עד 1024 תווים
titlestringעד 180 תווים
languagestringשפת השיחה, למשל he, en או auto. ברירת מחדל: שפת הבוט השמורה של בעל המפתח.
summary_languagehe | en
summary_recipient_emailemailנמען מאומת של אזור העבודה. ברירת מחדל: בעל המפתח, ואם אינו מאומת — נמען ברירת המחדל.
start_timedate-timeלהצטרף בזמן הזה במקום עכשיו (עד 60 יום קדימה).
end_timedate-time
curl -X POST "https://mesakem.com/api/v1/meetings/bot" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "meeting_url": "https://zoom.us/j/1234567890?pwd=abc123",
    "title": "Discovery call — Acme"
  }'
תשובה לדוגמה · 202 Accepted
{
  "object": "bot_dispatch",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "status": "scheduling",
  "status_detail": "queued",
  "scheduled_start_time": null,
  "app_url": "https://mesakem.com/dashboard/meeting/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b"
}
POST/meetings/{meeting_id}/bot→ 202 Acceptedbot:write

תזמון הבוט לפגישה קרובה מהיומן

event_id הוא מזהה cal_evt_… מ-GET /meetings/upcoming. אותו מתג כמו "להצטרף" ביומן שבדשבורד.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
apply_to_seriesbooleanלהצטרף גם לכל הפגישות הבאות בסדרה החוזרת.ברירת מחדל false
curl -X POST "https://mesakem.com/api/v1/meetings/cal_evt_Qm9pZ2h0LXNlcmllcy0x/bot" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "apply_to_series": false
  }'
תשובה לדוגמה · 202 Accepted
{
  "object": "bot_schedule",
  "event_id": "cal_evt_Qm9pZ2h0LXNlcmllcy0x",
  "status": "scheduling",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "admission": {
    "accepted": true,
    "reason": null
  },
  "apply_to_series": false,
  "start_time": "2026-10-20T07:00:00.000Z"
}
DELETE/meetings/{meeting_id}/bot→ 202 Acceptedbot:write

ביטול הבוט לפגישה מהיומן, או הוצאתו משיחה

cal_evt_…: הבוט לא יצטרף ("לדלג" בדשבורד). run_…: הבוט יוצא מהשיחה עכשיו, והקטע שהוקלט מתומלל ומסוכם כרגיל. לבעלי הפגישה בלבד.

פרמטרים
פרמטריםסוגהערות
meeting_id · חובהstringבנתיב
apply_to_seriestrue | falsecal_evt_… only: also skip every future meeting of the series.
curl -X DELETE "https://mesakem.com/api/v1/meetings/cal_evt_Qm9pZ2h0LXNlcmllcy0x/bot" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה · 202 Accepted
{
  "object": "bot_schedule",
  "event_id": "cal_evt_Qm9pZ2h0LXNlcmllcy0x",
  "status": "cancelling",
  "cancelled_meetings": 1,
  "apply_to_series": false
}

הגדרות הצטרפות

GET/settings/notetaker-automationsettings:read

מצב ההצטרפות האוטומטית מהיומן

curl "https://mesakem.com/api/v1/settings/notetaker-automation" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "notetaker_automation",
  "automation": "JOIN_AS_HOST",
  "allowed": true
}
PUT/settings/notetaker-automationsettings:write

קביעת מצב ההצטרפות האוטומטית

MANUAL: אף פעם לא אוטומטית. JOIN_ALL_EVENTS: כל פגישה עם קישור נתמך. JOIN_EXTERNAL_ONLY: רק פגישות עם אנשים מחוץ לדומיין שלכם. JOIN_AS_HOST: רק פגישות שאתם מארגנים.

גוף הבקשה application/json
שדהסוגהערות
automation · חובהMANUAL | JOIN_ALL_EVENTS | JOIN_EXTERNAL_ONLY | JOIN_AS_HOST
curl -X PUT "https://mesakem.com/api/v1/settings/notetaker-automation" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "automation": "JOIN_AS_HOST"
  }'
תשובה לדוגמה
{
  "object": "notetaker_automation",
  "automation": "JOIN_EXTERNAL_ONLY",
  "allowed": true
}

העלאת הקלטות

POST/uploads→ 201 Createduploads:write

התחלת העלאה (PUT חתום, עד 200MB)

שלחו PUT של הקובץ ל-upload.url עם הכותרות שבתשובה, ואז POST /uploads/{upload_id}/complete. עד 3 העלאות בתהליך בו-זמנית.

גוף הבקשה application/json
שדהסוגהערות
filename · חובהstringסיומת mp3, wav, m4a, mp4 או webm.עד 180 תווים
content_type · חובהstringאחד מ: audio/mpegaudio/mp3audio/wavaudio/x-wavaudio/mp4audio/m4aaudio/x-m4aaudio/aacaudio/webmvideo/mp4video/webmvideo/quicktime
size_bytes · חובהintegerהגודל המדויק בבתים; עד 200MB.
titlestringעד 180 תווים
languagestring
summary_languagehe | en
categorymeeting | callברירת מחדל "meeting"
curl -X POST "https://mesakem.com/api/v1/uploads" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "call.m4a",
    "content_type": "audio/mp4",
    "size_bytes": 3145728,
    "language": "he"
  }'
תשובה לדוגמה · 201 Created
{
  "object": "upload",
  "id": "recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "meeting_id": "run_upload_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "filename": "call.m4a",
  "content_type": "audio/mp4",
  "size_bytes": 3145728,
  "app_url": "https://mesakem.com/dashboard/meeting/run_upload_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "created_at": "2026-10-18T09:00:00.000Z",
  "status": "awaiting_upload",
  "upload": {
    "url": "https://storage.example/uploaded-recordings/…?X-Amz-Signature=…",
    "method": "PUT",
    "headers": {
      "content-type": "audio/mp4",
      "content-length": "3145728"
    },
    "expires_at": "2026-10-18T09:15:00.000Z"
  }
}
POST/uploads/{upload_id}/complete→ 202 Accepteduploads:write

סיום העלאה

בודק את הגודל והסוג של הקובץ שנשמר, ואז מכניס לתור תמלול וסיכום.

פרמטרים
פרמטריםסוגהערות
upload_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
size_bytesintegerברירת מחדל: הגודל שהוצהר ב-POST /uploads.
curl -X POST "https://mesakem.com/api/v1/uploads/recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9/complete" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
תשובה לדוגמה · 202 Accepted
{
  "object": "upload",
  "id": "recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "meeting_id": "run_upload_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "filename": "call.m4a",
  "content_type": "audio/mp4",
  "size_bytes": 3145728,
  "app_url": "https://mesakem.com/dashboard/meeting/run_upload_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "created_at": "2026-10-18T09:00:00.000Z",
  "status": "processing"
}
GET/uploads/{upload_id}meetings:read

העלאה אחת

האובייקט ש-upload.failed מציין: מצב וקוד שגיאה. למי שהעלה בלבד.

פרמטרים
פרמטריםסוגהערות
upload_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/uploads/recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "upload",
  "id": "recjob_8a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "meeting_id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "status": "failed",
  "category": "meeting",
  "filename": "interview.m4a",
  "content_type": "audio/mp4",
  "size_bytes": 18234567,
  "duration": null,
  "error_code": "transcription_failed",
  "app_url": "https://mesakem.com/dashboard/meeting/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
  "created_at": "2026-10-16T09:00:00.000Z",
  "updated_at": "2026-10-16T09:04:00.000Z"
}

חדרים

GET/roomsrooms:read

רשימת חדרים

החדרים שלכם והחדרים המשותפים באזור העבודה; חדר פרטי של חבר אחר לא מוצג לעולם. המונים כוללים רק פריטים שאתם יכולים לקרוא.

פרמטרים
פרמטריםסוגהערות
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
archivedtrue | falseברירת מחדל false
searchstringRoom name, description or client name contains this (case-insensitive).
curl "https://mesakem.com/api/v1/rooms?limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
      "object": "room",
      "name": "אקמה — פיילוט",
      "description": "כל הפגישות עם אקמה",
      "client_name": "Acme",
      "keywords": [
        "אקמה",
        "פיילוט"
      ],
      "visibility": "private",
      "archived": false,
      "created_by_you": true,
      "meeting_count": 4,
      "call_count": 1,
      "last_activity_at": "2026-10-16T10:00:00.000Z",
      "app_url": "https://mesakem.com/dashboard/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
      "created_at": "2026-09-01T08:00:00.000Z",
      "updated_at": "2026-10-16T10:00:00.000Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
POST/rooms→ 201 Createdrooms:write

יצירת חדר

גוף הבקשה application/json
שדהסוגהערות
name · חובהstringThe room's name (title is accepted as the same field).עד 120 תווים
titlestringSame as name.עד 120 תווים
descriptionstring | nullעד 4000 תווים
client_namestring | nullעד 200 תווים
keywordsarray<string>≤ 100 פריטים
curl -X POST "https://mesakem.com/api/v1/rooms" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme pilot",
    "client_name": "Acme"
  }'
תשובה לדוגמה · 201 Created
{
  "id": "room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "object": "room",
  "name": "אקמה — פיילוט",
  "description": "כל הפגישות עם אקמה",
  "client_name": "Acme",
  "keywords": [
    "אקמה",
    "פיילוט"
  ],
  "visibility": "private",
  "archived": false,
  "created_by_you": true,
  "meeting_count": 0,
  "call_count": 0,
  "last_activity_at": "2026-10-16T10:00:00.000Z",
  "app_url": "https://mesakem.com/dashboard/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "created_at": "2026-09-01T08:00:00.000Z",
  "updated_at": "2026-10-16T10:00:00.000Z"
}
GET/rooms/{room_id}rooms:read

חדר אחד

expand=meetings,calls מציג את הפריטים שלו (האחרון שנוסף ראשון).

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
expandstringComma-separated: participants, documents.
items_limitinteger (1–100)With expand=meetings / calls.
curl "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a?expand=meetings" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "object": "room",
  "name": "אקמה — פיילוט",
  "description": "כל הפגישות עם אקמה",
  "client_name": "Acme",
  "keywords": [
    "אקמה",
    "פיילוט"
  ],
  "visibility": "private",
  "archived": false,
  "created_by_you": true,
  "meeting_count": 4,
  "call_count": 1,
  "last_activity_at": "2026-10-16T10:00:00.000Z",
  "app_url": "https://mesakem.com/dashboard/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "created_at": "2026-09-01T08:00:00.000Z",
  "updated_at": "2026-10-16T10:00:00.000Z",
  "meetings": [
    {
      "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
      "object": "meeting",
      "title": "פגישת היכרות — אקמה",
      "status": "completed",
      "source": "zoom",
      "start_time": "2026-10-15T09:00:12.000Z",
      "added_at": "2026-10-15T10:00:00.000Z"
    }
  ],
  "meetings_has_more": false
}
PATCH/rooms/{room_id}rooms:write

עדכון חדר (שם, תיאור, לקוח, מילות מפתח, ארכיון)

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
namestringThe room's name (title is accepted as the same field).עד 120 תווים
titlestringSame as name.עד 120 תווים
descriptionstring | nullעד 4000 תווים
client_namestring | nullעד 200 תווים
keywordsarray<string>≤ 100 פריטים
archivedbooleantrue archives, false restores.
curl -X PATCH "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme — customer"
  }'
תשובה לדוגמה
{
  "id": "room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "object": "room",
  "name": "אקמה — לקוח",
  "description": "כל הפגישות עם אקמה",
  "client_name": "Acme",
  "keywords": [
    "אקמה",
    "פיילוט"
  ],
  "visibility": "private",
  "archived": false,
  "created_by_you": true,
  "meeting_count": 4,
  "call_count": 1,
  "last_activity_at": "2026-10-16T10:00:00.000Z",
  "app_url": "https://mesakem.com/dashboard/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "created_at": "2026-09-01T08:00:00.000Z",
  "updated_at": "2026-10-16T10:00:00.000Z"
}
DELETE/rooms/{room_id}→ 202 Acceptedrooms:write

העברת חדר לארכיון

אין מחיקה סופית של חדר: DELETE מעביר לארכיון (PATCH עם archived=false משחזר). הפגישות שבו לא משתנות.

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה · 202 Accepted
{
  "id": "room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "object": "room",
  "name": "אקמה — פיילוט",
  "description": "כל הפגישות עם אקמה",
  "client_name": "Acme",
  "keywords": [
    "אקמה",
    "פיילוט"
  ],
  "visibility": "private",
  "archived": true,
  "created_by_you": true,
  "meeting_count": 4,
  "call_count": 1,
  "last_activity_at": "2026-10-16T10:00:00.000Z",
  "app_url": "https://mesakem.com/dashboard/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "created_at": "2026-09-01T08:00:00.000Z",
  "updated_at": "2026-10-16T10:00:00.000Z"
}
PUT/rooms/{room_id}/meetings/{meeting_id}→ 204 No Contentrooms:write

הוספת פגישה לחדר

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
meeting_id · חובהstringבנתיב
curl -X PUT "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
DELETE/rooms/{room_id}/meetings/{meeting_id}→ 204 No Contentrooms:write

הסרת פגישה מחדר

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
meeting_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/meetings/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
PUT/rooms/{room_id}/calls/{call_id}→ 204 No Contentrooms:write

הוספת שיחה לחדר

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
call_id · חובהstringבנתיב
curl -X PUT "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/calls/call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
DELETE/rooms/{room_id}/calls/{call_id}→ 204 No Contentrooms:write

הסרת שיחה מחדר

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
call_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/calls/call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
GET/rooms/{room_id}/insightsrooms:read

ההחלטות והניתוחים השמורים של חדר (קריאה בלבד)

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

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/insights" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "room_insights",
  "room_id": "room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a",
  "source_count": 4,
  "decision_log": [
    {
      "source": {
        "type": "meeting",
        "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b"
      },
      "title": "פגישת היכרות — אקמה",
      "occurred_at": "2026-10-15T09:00:12.000Z",
      "decisions": [
        "פיילוט של חודש"
      ]
    }
  ],
  "analyses": {
    "decisions": null,
    "trends": {
      "kind": "trend_analysis",
      "created_at": "2026-10-10T12:00:00.000Z",
      "stale": true,
      "content": {
        "momentum": "…",
        "open_threads": [],
        "risks": [],
        "sentiment_by_meeting": [],
        "next_step_suggestions": []
      }
    }
  },
  "generated_on_request": false
}
GET/rooms/{room_id}/permissionsshares:read

הקישור הציבורי של חדר (ליוצר החדר)

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/permissions" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [],
  "share_url": null,
  "next_cursor": null,
  "has_more": false
}
POST/rooms/{room_id}/permissionsshares:write

יצירת קישור ציבורי לחדר (בדשבורד)

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

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
גוף הבקשה application/json
שדהסוגהערות
recipient · חובהobject
role"read"
curl -X POST "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/permissions" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient": {
      "type": "anyone"
    },
    "role": "read"
  }'
תשובה לדוגמה
{
  "id": "perm_anyone",
  "object": "permission",
  "recipient": {
    "type": "anyone"
  },
  "role": "read",
  "status": "ready",
  "share_url": "https://mesakem.com/r#…",
  "created_at": null
}
DELETE/rooms/{room_id}/permissions/{permission_id}→ 204 No Contentshares:write

ביטול הקישור הציבורי של חדר

פרמטרים
פרמטריםסוגהערות
room_id · חובהstringבנתיב
permission_id · חובהstringבנתיב
curl -X DELETE "https://mesakem.com/api/v1/rooms/room_3c2b1a09-8f7e-4d6c-9b5a-4f3e2d1c0b9a/permissions/perm_anyone" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"

שיחות טלפון

GET/callscalls:read

רשימת שיחות טלפון

שיחות שהוקלטו ממערכת הטלפון המחוברת. שיחה שיצרה פגישה מופיעה גם ב-GET /meetings (מקור phone).

פרמטרים
פרמטריםסוגהערות
limitinteger (1–100)ברירת מחדל 25
cursorstringnext_cursor from the previous page of the SAME request (same key and filters).
fromdate-timeISO 8601 with offset, or YYYY-MM-DD (00:00 UTC).
todate-time
curl "https://mesakem.com/api/v1/calls?limit=25" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy",
      "object": "call",
      "title": "דנה לוי",
      "provider": "link",
      "direction": "outbound",
      "duration": 312,
      "status": "ready",
      "contact_name": "דנה לוי",
      "caller": "035551234",
      "callee": "0525551234",
      "recorded_date": "15/10/2026",
      "recorded_time": "11:42",
      "start_time": "2026-10-15T08:42:00.000Z",
      "language": "he",
      "has_transcript": true,
      "has_summary": true,
      "has_recording": true,
      "meeting_id": "run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
      "app_url": "https://mesakem.com/dashboard/meeting/run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
      "created_at": "2026-10-15T08:47:00.000Z",
      "updated_at": "2026-10-15T08:51:00.000Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
GET/calls/{call_id}calls:read

שיחה אחת

פרמטרים
פרמטריםסוגהערות
call_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/calls/call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy",
  "object": "call",
  "title": "דנה לוי",
  "provider": "link",
  "direction": "outbound",
  "duration": 312,
  "status": "ready",
  "contact_name": "דנה לוי",
  "caller": "035551234",
  "callee": "0525551234",
  "recorded_date": "15/10/2026",
  "recorded_time": "11:42",
  "start_time": "2026-10-15T08:42:00.000Z",
  "language": "he",
  "has_transcript": true,
  "has_summary": true,
  "has_recording": true,
  "meeting_id": "run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "app_url": "https://mesakem.com/dashboard/meeting/run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "created_at": "2026-10-15T08:47:00.000Z",
  "updated_at": "2026-10-15T08:51:00.000Z"
}
GET/calls/{call_id}/transcriptcalls:read

תמלול של שיחה (json או text)

פרמטרים
פרמטריםסוגהערות
call_id · חובהstringבנתיב
formatstring
curl "https://mesakem.com/api/v1/calls/call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy/transcript" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "call_transcript",
  "call_id": "call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy",
  "meeting_id": "run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "language": "he",
  "text": "דובר 1: שלום, מדברת דנה…",
  "text_oversized": false
}
GET/calls/{call_id}/summarycalls:read

סיכום של שיחה (json, markdown או text)

פרמטרים
פרמטריםסוגהערות
call_id · חובהstringבנתיב
formatstring
curl "https://mesakem.com/api/v1/calls/call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy/summary?format=markdown" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "call_summary",
  "call_id": "call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy",
  "meeting_id": "run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "summary_id": "summary_1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
  "language": "he",
  "body_markdown": "## סיכום\nהלקוחה ביקשה הצעת מחיר…",
  "action_items": [
    {
      "text": "לשלוח הצעת מחיר"
    }
  ],
  "decisions": [],
  "edited": false,
  "created_at": "2026-10-15T08:51:00.000Z"
}
GET/calls/{call_id}/recordingcalls:read

קישור להקלטת שיחה ל-5 דקות

פרמטרים
פרמטריםסוגהערות
call_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/calls/call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy/recording" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "recording_link",
  "call_id": "call_Y3JjXzFhMmIzYwoxNzI5MDAwMDAwLjQy",
  "meeting_id": "run_9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "recording_id": "recording_5d6e7f8a-9b0c-4d1e-8f2a-3b4c5d6e7f8a",
  "status": "ready",
  "recording_url": "https://mesakem.com/api/v1/r/Zm9yLWV4YW1wbGUtb25seQ",
  "expires_at": "2026-10-18T08:05:00.000Z",
  "format": "mp3",
  "duration": 312,
  "created_at": "2026-10-15T08:47:00.000Z"
}

חיפוש

GET/searchsearch:read

חיפוש בפגישות, משימות, חדרים ואנשים

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

פרמטרים
פרמטריםסוגהערות
qstringKeyword search: every word must match (prefix match for meetings). Needs search:read.
typesstringComma-separated: meeting, task, room, person. Default: every type your key can read.
limitinteger (1–100)ברירת מחדל 25
fromdate-timeISO 8601 with offset, or YYYY-MM-DD (00:00 UTC).
todate-time
curl "https://mesakem.com/api/v1/search?q=proposal&types=meeting%2Ctask" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "query": "הצעת מחיר",
  "types": [
    "meeting",
    "task",
    "room",
    "person"
  ],
  "mode": "keyword",
  "data": [
    {
      "type": "meeting",
      "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b",
      "title": "פגישת היכרות — אקמה",
      "snippet": "הוסכם לשלוח הצעת מחיר עד יום ראשון…",
      "status": "completed",
      "source": "zoom",
      "start_time": "2026-10-15T09:00:12.000Z",
      "match": {
        "title": false,
        "summary": true
      },
      "app_url": "https://mesakem.com/dashboard/meeting/run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b"
    },
    {
      "type": "task",
      "id": "agent_task_5c1f9a2b",
      "title": "לשלוח הצעת מחיר לאקמה",
      "snippet": null,
      "status": "open",
      "updated_at": "2026-10-16T07:10:00.000Z",
      "app_url": "https://mesakem.com/dashboard/tasks"
    }
  ],
  "has_more": false
}

תבניות סיכום

GET/templatestemplates:read

רשימת תבניות סיכום (מובנות ושלכם)

פרמטרים
פרמטריםסוגהערות
typemeeting | callSummary type. The focused built-in template exists for both.
curl "https://mesakem.com/api/v1/templates?type=meeting" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "object": "list",
  "data": [
    {
      "id": "system_detailed_mesakem",
      "object": "template",
      "type": "meeting",
      "name": "סיכום פגישה של Mesakem",
      "instructions": "…",
      "built_in": true,
      "is_default": true,
      "format": "classic",
      "source_citations": false,
      "editable": false,
      "created_at": "2026-10-18T09:00:00.000Z",
      "updated_at": "2026-10-18T09:00:00.000Z"
    },
    {
      "id": "summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d",
      "object": "template",
      "type": "meeting",
      "name": "שיחת מכירה",
      "instructions": "סכם כפגישת מכירה: צורכי הלקוח, התנגדויות, סיכוי סגירה, משימות המשך עם אחראי ותאריך, והודעת המשך קצרה ללקוח.",
      "built_in": false,
      "is_default": false,
      "format": "classic",
      "source_citations": false,
      "editable": true,
      "created_at": "2026-10-18T09:00:00.000Z",
      "updated_at": "2026-10-18T09:00:00.000Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
POST/templates→ 201 Createdtemplates:write

יצירת תבנית סיכום

נשמרת בדיוק כפי שנשלחה: שום AI לא משכתב או בודק אותה. נסחו אותה איך שנוח לכם ושלחו לכאן.

גוף הבקשה application/json
שדהסוגהערות
name · חובהstringShown in the template picker. Not the name of a built-in template.עד 120 תווים
instructions · חובהstringHow to write the summary: structure, tone, emphasis, sections. Stored exactly as sent.עד 12000 תווים
typemeeting | callברירת מחדל "meeting"
make_defaultbooleanברירת מחדל false
source_citationsbooleanברירת מחדל false
curl -X POST "https://mesakem.com/api/v1/templates" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "meeting",
    "name": "Discovery call",
    "instructions": "Summarize as a discovery call: needs, objections, budget, next steps with owner and date."
  }'
תשובה לדוגמה · 201 Created
{
  "id": "summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d",
  "object": "template",
  "type": "meeting",
  "name": "שיחת מכירה",
  "instructions": "סכם כפגישת מכירה: צורכי הלקוח, התנגדויות, סיכוי סגירה, משימות המשך עם אחראי ותאריך, והודעת המשך קצרה ללקוח.",
  "built_in": false,
  "is_default": false,
  "format": "classic",
  "source_citations": false,
  "editable": true,
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z",
  "outcome": "created"
}
GET/templates/{template_id}templates:read

תבנית סיכום אחת

פרמטרים
פרמטריםסוגהערות
template_id · חובהstringבנתיב
typemeeting | callSummary type. The focused built-in template exists for both.
curl "https://mesakem.com/api/v1/templates/summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d",
  "object": "template",
  "type": "meeting",
  "name": "שיחת מכירה",
  "instructions": "סכם כפגישת מכירה: צורכי הלקוח, התנגדויות, סיכוי סגירה, משימות המשך עם אחראי ותאריך, והודעת המשך קצרה ללקוח.",
  "built_in": false,
  "is_default": false,
  "format": "classic",
  "source_citations": false,
  "editable": true,
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z"
}
PATCH/templates/{template_id}templates:write

עדכון תבנית שלכם

פרמטרים
פרמטריםסוגהערות
template_id · חובהstringבנתיב
typemeeting | callSummary type. The focused built-in template exists for both.
גוף הבקשה application/json
שדהסוגהערות
namestringעד 120 תווים
instructionsstringעד 12000 תווים
make_defaultboolean
curl -X PATCH "https://mesakem.com/api/v1/templates/summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Discovery call (v2)"
  }'
תשובה לדוגמה
{
  "id": "summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d",
  "object": "template",
  "type": "meeting",
  "name": "שיחת מכירה",
  "instructions": "סכם כפגישת מכירה: צורכי הלקוח, התנגדויות, סיכוי סגירה, משימות המשך עם אחראי ותאריך, והודעת המשך קצרה ללקוח.",
  "built_in": false,
  "is_default": false,
  "format": "classic",
  "source_citations": false,
  "editable": true,
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z"
}
DELETE/templates/{template_id}→ 204 No Contenttemplates:write

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

אי אפשר לשנות תבניות מובנות. אם זו הייתה ברירת המחדל, התבנית המובנית חוזרת להיות ברירת המחדל.

פרמטרים
פרמטריםסוגהערות
template_id · חובהstringבנתיב
typemeeting | callSummary type. The focused built-in template exists for both.
curl -X DELETE "https://mesakem.com/api/v1/templates/summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
POST/templates/{template_id}/defaulttemplates:write

קביעת תבנית כברירת מחדל לסוג הסיכום שלה

פרמטרים
פרמטריםסוגהערות
template_id · חובהstringבנתיב
typemeeting | callSummary type. The focused built-in template exists for both.
curl -X POST "https://mesakem.com/api/v1/templates/summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d/default" \
  -H "Authorization: Bearer $MESAKEM_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
תשובה לדוגמה
{
  "id": "summary_template_4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d",
  "object": "template",
  "type": "meeting",
  "name": "שיחת מכירה",
  "instructions": "סכם כפגישת מכירה: צורכי הלקוח, התנגדויות, סיכוי סגירה, משימות המשך עם אחראי ותאריך, והודעת המשך קצרה ללקוח.",
  "built_in": false,
  "is_default": true,
  "format": "classic",
  "source_citations": false,
  "editable": true,
  "created_at": "2026-10-18T09:00:00.000Z",
  "updated_at": "2026-10-18T09:00:00.000Z"
}

קישורים ציבוריים

GET/shares/{share_id}shares:read

קישור ציבורי אחד (פגישה או חדר)

האובייקט שה-webhooks share.created / share.revoked מציינים. ליוצר הקישור בלבד.

פרמטרים
פרמטריםסוגהערות
share_id · חובהstringבנתיב
curl "https://mesakem.com/api/v1/shares/pshare_7c6b5a49-3827-4615-9d0c-1b2a3c4d5e6f" \
  -H "Authorization: Bearer $MESAKEM_API_KEY"
תשובה לדוגמה
{
  "id": "pshare_7c6b5a49-3827-4615-9d0c-1b2a3c4d5e6f",
  "object": "share",
  "resource": {
    "type": "meeting",
    "id": "run_6f1c2a4e-0d3b-4e5f-9a7b-1c2d3e4f5a6b"
  },
  "status": "ready",
  "share_url": "https://mesakem.com/s#…",
  "created_at": "2026-10-16T09:00:00.000Z",
  "revoked_at": null
}

תוכניות ומגבלות

ניסיוןPro וארגונים
גישה ל-APIAPI מוגבל — קריאה בלבדAPI מלא
מפתחות פעילים210
נקודות Webhook1 (בהגדרות)עד 10 לאדם
ניהול webhooks ב-API (webhooks:write)—כלול
פעולות כתיבה: בוט, משימות, העלאות ושיתוף—כלולות
חדרים: קריאהכלולכלול
חדרים: יצירה ועריכה—כלול
שיחות טלפוןכלולכלול
חיפושכלולכלול
תבניות סיכום: קריאהכלולכלול
תבניות סיכום: יצירה ועריכה—כלול

מגבלות הקצב הטכניות זהות לכל התוכניות ומפורטות בפרק "מגבלות ושיטות עבודה".