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/me | posts:read | — |
| GET /api/businesses | posts:read | — |
| GET /api/cities | posts:read | — |
| GET /api/posts/mine | posts:read | — |
| GET /api/feed?kind=visual|text | posts:read | 1 (דוא״ל מאומת) |
| GET /api/posts/{id} | posts:read | 1 (דוא״ל מאומת) |
| POST /api/posts | posts:write | 3 לפרסום בפיד הציבורי |
| POST /api/posts/visual | posts:write | 3 לפרסום בפיד הציבורי |
| POST /api/posts/youtube | posts:write | 3 לפרסום בפיד הציבורי |
| DELETE /api/posts/{id} | posts:write | המחבר או אדמין |
| POST /api/notifications | notifications: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) מלאה, אופציונלית, נפתחת ומוצגת ככרטיס |
| language | fr | 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 תווים). מפתח המוצמד לעסק מקבל את שם העסק כברירת מחדל |
| level | info | 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} עם אסימון התחברות. ההשפעה מיידית. פרסומים שכבר נעשו נשארים באוויר: ביטול אישור גישה אינו הסרה של מה שפורסם באמצעותו.