MishkanMishkan

API

לפרסם במשכן מחוץ לאפליקציה.

עודכן ב-2026-08-23

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

כל מה שלהלן מוגש מ-https://api.mishkan.tech. התשובות ב-JSON; שגיאה נושאת סטטוס HTTP ומחרוזת "error" אחת.

יצירת מפתח

מפתחות נוצרים באפליקציה: פרופיל ← מפתחות API ← +. יצירת מפתח דורשת רמה 4 (אימות פורמלי), אותו רף כמו חשבונות עסקיים — מפתח פועל בשמכם מחוץ לאפליקציה, ולכן הוא ניתן רק לחשבון שאדמין זיהה. צפייה וביטול אפשריים בכל רמה.

  • שם — לצורך הסדר שלכם («Studio Midbar»).
  • לפרסם בתור — החשבון האישי שלכם או אחד מחשבונות המשנה העסקיים. מפתח שמוצמד לעסק יכול לפרסם רק תחת אותה זהות; ציון זהות אחרת בבקשה נדחה.
  • לאפשר פרסום — כבוי, המפתח יכול רק לקרוא.

הסוד (msk_live_…) מוצג פעם אחת בלבד. השרת שומר רק את ה-SHA-256 שלו, ולכן אי אפשר לשחזר אותו — מפתח שאבד מבטלים ומחליפים. אפשר להחזיק עד 20 מפתחות פעילים, לכל אחד תפוגה אופציונלית של עד עשר שנים.

אימות

שלחו את המפתח כ-bearer token. גם הכותרת X-API-Key מתקבלת, עבור לקוחות ששומרים את Authorization לעצמם.

curl https://api.mishkan.tech/api/users/me \
  -H "Authorization: Bearer $MISHKAN_KEY"

מפתח לא מוכר, מבוטל או שפג — כולם מקבלים אותו 401, במכוון: בדיקה לא מלמדת תוקף דבר.

הרשאות

מפתח נושא posts:read, posts:write, notifications:write, או כל צירוף שלהם. כל השאר — הודעות, מ, אימות, ניהול, וניהול המפתחות עצמו — שמור לחיבור מתוך האפליקציה. מפתח שדלף אינו יכול ליצור מפתח נוסף, לקרוא את השיחות שלכם או לרוקן את היתרה.

  • posts:read — קריאת הפיד, פוסט בודד, הפוסטים שלכם, החשבונות העסקיים שלכם.
  • posts:write — פרסום ומחיקה.
  • notifications:write — התרעה לבעלים של המפתח, ולו בלבד. לעולם לא ניתנת כברירת מחדל: בקשו אותה ביצירת המפתח, או הפעילו אותה אחר כך מהשורה שלו באפליקציה.

נקודות קצה

נתיבהרשאהרמה נדרשת
GET /api/users/meposts:read
GET /api/businessesposts:read
GET /api/citiesposts:read
GET /api/posts/mineposts:read
GET /api/feed?kind=visual|textposts:read1 (דוא״ל מאומת)
GET /api/posts/{id}posts:read1 (דוא״ל מאומת)
POST /api/postsposts:write3 לפרסום בפיד הציבורי
POST /api/posts/visualposts:write3 לפרסום בפיד הציבורי
POST /api/posts/youtubeposts:write3 לפרסום בפיד הציבורי
DELETE /api/posts/{id}posts:writeהמחבר או אדמין
POST /api/notificationsnotifications:write— (מתריע לבעליו שלו)

פרסום בפיד של קבוצה (conversation_id) מחליף את דרישת הרמה בחברות בקבוצה ובמדיניות הפרסום שלה, ומשלם את המחיר של הקבוצה לבעליה.

curl "https://api.mishkan.tech/api/feed?kind=text&limit=20" \
  -H "Authorization: Bearer $MISHKAN_KEY"

פרסום

פרסום בפיד הציבורי עולה 2 מ ודורש אימות מזוזה (רמה 3). החיוב מוחזר אם השמירה נכשלת.

‏POST /api/posts מפרסם טקסט וקישורים, ב-JSON:

שדהמשמעות
contentעד 4000 תווים
link_urlכתובת http(s) מלאה, אופציונלית, נפתחת ומוצגת ככרטיס
languagefr | en | he — מסנן השפה של הפיד
cityמזהה עיר — מסנן העיר של הפיד
business_idאופציונלי; חייב להתאים לזהות המפתח אם הוא מוצמד
conversation_idאופציונלי; מפרסם בפיד של אותה קבוצה במקום בפיד הציבורי
curl -X POST https://api.mishkan.tech/api/posts \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"Chag sameach","language":"en"}'

‏POST /api/posts/visual מפרסם ריל או קרוסלה כ-multipart/form-data: בין קובץ אחד לעשרה, לפי סדר הטופס, עד 30MB לכל הבקשה. הכיתוב נכנס ל-content (1000 תווים), ואותם שדות אופציונליים חלים.

curl -X POST https://api.mishkan.tech/api/posts/visual \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -F "content=Kabbalat Shabbat, 18:30" \
  -F "media=@reel.mp4;type=video/mp4"

‏POST /api/posts/youtube מפרסם ריל שמבוסס על סרטון יוטיוב. ‏url הוא הסרטון; ‏link_url הוא כפתור «למידע נוסף» נפרד — מלאו את שניהם אם אתם רוצים את שניהם.

curl -X POST https://api.mishkan.tech/api/posts/youtube \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://youtu.be/abc123","link_url":"https://example.org"}'

התראות

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

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

שדהמשמעות
titleחובה, עד 120 תווים
bodyעד 500 תווים
sourceמי מדבר (60 תווים). מפתח המוצמד לעסק מקבל את שם העסק כברירת מחדל
levelinfo | warning | error — קובע את הסמל, לעולם לא את הנוסח
urlכתובת http(s) אופציונלית שההתראה פותחת
dedupe_keyבולע חזרות של אותה התראה במשך 6 שעות
curl -X POST https://api.mishkan.tech/api/notifications \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Autopilot stopped",
    "body": "Anthropic credit exhausted — nothing published since 03:12.",
    "source": "TorahWithLLM",
    "level": "error",
    "url": "https://console.anthropic.com/settings/billing",
    "dedupe_key": "anthropic-credit"
  }'

‏202 כשההתראה יוצאת. חזרה שנבלעה מקבלת 200 עם deduped: true והמזהה של ההתראה שכבר נשלחה — הבקשה הצליחה ודבר לא נשלח:

{ "delivered": true, "remaining_today": 59 }
{ "id": "…", "delivered": false, "deduped": true, "remaining_today": 59 }

dedupe_key הוא מה שהופך לולאת התראות לנסבלת: פיילוט שמנסה כל עשר דקות בלי קרדיט היה שולח אחרת את אותה שורה 144 פעמים ביום. מתחתיו רצפה קשיחה של 60 התראות לחשבון לכל 24 שעות, שמעבר לה המסלול מחזיר 429; ‏remaining_today חוזר בכל קריאה כדי שתוכלו להאט לפני כן.

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

מגבלות

מגבלהערך
קריאותכ-60 לדקה, פרץ של 30
כתיבותכ-20 לדקה, פרץ של 5
לפי כתובת IPכ-300 לדקה, פרץ של 60
גודל בקשה30MB (App Engine מגביל ל-32MB)
מדיה לפרסום10
מפתחות פעילים לחשבון20

שגיאות

{ "error": "missing the posts:write scope" }
סטטוסהמשמעות
401 invalid API keyלא מוכר, מבוטל או שפג — שלושתם נענים אותו הדבר
403 missing the posts:write scopeהמפתח לקריאה בלבד
403 verification level 3 requiredהחשבון אינו מאומת מזוזה, מה שהפיד הציבורי דורש
403 can only publish as the business account it is bound toהבקשה ציינה זהות אחרת מזו של המפתח
402אין מספיק מ לתשלום על הפרסום
429חריגה מהמכסה — המתינו ונסו שוב
429 at most 60 notifications per dayרצפת ההתראות היומית — השתמשו ב‑dedupe_key

ביטול מפתח

החליקו על המפתח (iOS) או הקישו על הפח (Android), או קראו ל-DELETE /api/api-keys/{id} עם אסימון התחברות. ההשפעה מיידית. פרסומים שכבר נעשו נשארים באוויר: ביטול אישור גישה אינו הסרה של מה שפורסם באמצעותו.