# banta API - תיעוד מלא > התיעוד הרשמי של ה-API של banta - מערכת לניהול תיקי משכנתא ויועצי משכנתאות. אימות במפתח API, לידים, לקוחות, תיקי משכנתא, משימות, מסמכים, חיובים ואבני דרך. מקור: https://docs.banta.co.il · אינדקס: https://docs.banta.co.il/he/llms.txt · OpenAPI: https://docs.banta.co.il/he/openapi.json גרסת API: 1.0.0 · נוצר: 2026-10-14 # מבוא ה-API של banta מאפשר לחבר את מערכת ניהול המשכנתאות למערכות אחרות: אתרי שיווק ודפי נחיתה, מערכות CRM, אוטומציות (Make, Zapier, n8n), BI וכלים פנימיים. כל קריאה פועלת על נתוני הארגון שאליו משויך מפתח ה-API, ורק עליהם. ## מה אפשר לעשות - **לידים** - קליטת לידים מטפסים ומקמפיינים, עדכון סטטוס, שליפה וחיפוש. - **לקוחות ואנשי קשר** - ניהול כרטיסי לקוח ואנשי מקצוע (בנקאים, שמאים, עורכי דין). - **תיקי משכנתא** - יצירה ועדכון של תיקים, כולל לווים, הכנסות, התחייבויות ומטרות. - **ניהול התיק** - משימות, הערות, תזכורות, עוקבים, אנשי קשר בתיק ואבני דרך. - **מסמכים** - מצב המסמכים, חתימות ומסמכים מיוצרים (קריאה). - **כספים** - חיובים, תשלומים, תמהילי מחשבון וניתוחי תיק. - **רשימות מערכת** - ערכים קבועים (סוגי תעסוקה, סוגי משכנתא, סטטוסים) לבניית טפסים. ## כתובת הבסיס כל נקודות הקצה נמצאות תחת: ``` https://app.banta.co.il/api-service ``` לדוגמה, רשימת הלידים: `GET https://app.banta.co.il/api-service/leads`. ## פורמט הנתונים - **JSON בלבד** - בקשות עם גוף נשלחות עם `Content-Type: application/json`, והתגובות תמיד JSON בקידוד UTF-8. - **מזהים** - כל המזהים הם UUID. - **תאריכים** - בפורמט ISO 8601. שדות תאריך-ושעה (`created_at`, `updated_at`) כוללים אזור זמן; שדות תאריך בלבד נשלחים כ-`YYYY-MM-DD`. - **סכומים** - מספרים (לא מחרוזות), בשקלים, אלא אם צוין אחרת בשדה. - **תשובות שגיאה** - מבנה אחיד, ראו [שגיאות](https://docs.banta.co.il/he/guides/errors.md). ## גרסאות ותאימות הגרסה הנוכחית של ה-API היא 1.0.0. כתובות ה-API אינן כוללות מספר גרסה. שינויים שמוסיפים שדות או נקודות קצה יכולים להיכנס בכל עת, ולכן כדאי לכתוב קוד שמתעלם משדות שאינו מכיר. שינויים שוברים יפורסמו מראש בעמוד [עדכונים](https://docs.banta.co.il/he/guides/changelog.md). ## גרסה לסוכני AI כל התיעוד זמין גם כטקסט נקי לסוכני AI ולמודלי שפה: [`llms.txt`](https://docs.banta.co.il/he/llms.txt), [`llms-full.txt`](https://docs.banta.co.il/he/llms-full.txt) וקובץ Markdown לכל נקודת קצה. אפשר גם לחבר את banta ישירות ל-Claude או ל-ChatGPT דרך MCP. ראו [סוכני AI ו-MCP](https://docs.banta.co.il/he/guides/ai-agents.md). ## תמיכה שאלות על ה-API: [support@banta.co.il](mailto:support@banta.co.il). מדריכים על המערכת עצמה נמצאים ב[מרכז העזרה](https://help.banta.co.il). --- # התחלה מהירה ## 1. יצירת מפתח API 1. התחברו ל-banta עם משתמש שיש לו הרשאה לנהל אינטגרציות בארגון. 2. עברו אל [הגדרות הארגון ← אינטגרציות ← API](https://app.banta.co.il/organization/settings?group=integrations&tab=api). 3. לחצו על יצירת מפתח חדש, תנו לו שם שמתאר את השימוש (למשל "טופס לידים באתר") ובחרו הרשאות. מומלץ לבחור את המינימום הנדרש; פירוט ב[אימות והרשאות](https://docs.banta.co.il/he/guides/authentication.md). 4. **העתיקו את המפתח מיד.** הוא מוצג פעם אחת בלבד, ואי אפשר לשחזר אותו אחר כך. > שמרו את המפתח בצד השרת בלבד (משתני סביבה או כספת סודות). לעולם אל תטמיעו אותו בקוד שרץ בדפדפן או באפליקציה. ## 2. הקריאה הראשונה שליפת חמשת הלידים האחרונים: ```bash curl "https://app.banta.co.il/api-service/leads?limit=5" \ -H "x-api-key: $BANTA_API_KEY" ``` התגובה היא רשימה עם מונה כולל: ```json { "data": [ { "id": "6f1c2a4e-0b7d-4b8e-9a51-2f6c3d8e9a10", "first_name": "ישראל", "last_name": "ישראלי", "phone": "050-0000000", "status": "new", "created_at": "2026-10-01T09:30:00+00:00" } ], "count": 128 } ``` `count` הוא מספר כל הרשומות שתואמות לשאילתה, לא רק אלה שבעמוד הנוכחי. ראו [עימוד וחיפוש](https://docs.banta.co.il/he/guides/conventions.md). ## 3. יצירת ליד ```bash curl -X POST "https://app.banta.co.il/api-service/leads" \ -H "x-api-key: $BANTA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "first_name": "ישראל", "last_name": "ישראלי", "phone": "050-0000000", "email": "israel@example.com", "source": "website" }' ``` תגובה מוצלחת מחזירה `201 Created` ואת הליד המלא, כולל ה-`id` שנוצר. ## אותה קריאה בשפות נפוצות **JavaScript (Node.js 18 ומעלה):** ```js const res = await fetch('https://app.banta.co.il/api-service/leads', { method: 'POST', headers: { 'x-api-key': process.env.BANTA_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ first_name: 'ישראל', last_name: 'ישראלי', phone: '050-0000000', source: 'website', }), }) if (!res.ok) { const err = await res.json() throw new Error(`banta API ${res.status}: ${err.error} ${err.details ?? ''}`) } const lead = await res.json() ``` **Python:** ```python import os import requests res = requests.post( "https://app.banta.co.il/api-service/leads", headers={"x-api-key": os.environ["BANTA_API_KEY"]}, json={ "first_name": "ישראל", "last_name": "ישראלי", "phone": "050-0000000", "source": "website", }, timeout=30, ) res.raise_for_status() lead = res.json() ``` ## מה הלאה - בכל נקודת קצה בתיעוד יש כפתור לשליחת בקשה אמיתית מהדפדפן. הבקשה נשלחת ישירות מהדפדפן שלכם ל-banta, בלי שרת ביניים. המפתח שתזינו נשמר רק בלשונית הפתוחה ונמחק כשסוגרים אותה. שימו לב שאלו בקשות אמיתיות על נתוני הארגון. - [אימות והרשאות](https://docs.banta.co.il/he/guides/authentication.md) - איך לצמצם את ההרשאות של מפתח. - [שגיאות](https://docs.banta.co.il/he/guides/errors.md) ו[מגבלות קצב](https://docs.banta.co.il/he/guides/rate-limits.md) - איך לטפל בכשלים. --- # אימות והרשאות ## מפתח API כל בקשה חייבת לכלול מפתח API בכותרת `x-api-key`: ```http GET /api-service/leads HTTP/1.1 Host: app.banta.co.il x-api-key: YOUR_API_KEY ``` - המפתח נוצר ב[הגדרות הארגון ← אינטגרציות ← API](https://app.banta.co.il/organization/settings?group=integrations&tab=api) ומוצג פעם אחת בלבד. banta שומרת רק גיבוב (hash) שלו. - כל מפתח משויך לארגון אחד. כל קריאה רואה ומשנה רק את נתוני הארגון הזה. אין דרך לגשת לנתוני ארגון אחר. - אפשר לבטל מפתח בכל רגע מאותו מסך, והביטול תקף מיד. למפתח אפשר גם לקבוע תאריך תפוגה. אחרי התאריך הזה הוא נדחה. - כל פעולת כתיבה מוצלחת (יצירה, עדכון ומחיקה) נרשמת ביומן ה-API של הארגון: המפתח, נקודת הקצה, הרשומה שהושפעה, הסטטוס והמשך. גוף הבקשה והתגובה אינם נשמרים. > המפתח שקול לסיסמה עם גישה לנתונים אישיים של לקוחות. השתמשו בו רק בצד השרת, אל תשמרו אותו בקוד או ב-git, והחליפו אותו מיד אם יש חשש שדלף. ## הרשאות לכל מפתח יש רשימת הרשאות. כל בקשה נבדקת לפי **משאב** ולפי **פעולה**: | שיטת HTTP | פעולה | |---|---| | `GET` | `read` | | `POST`, `PUT`, `PATCH` | `write` | | `DELETE` | `delete` | המשאבים הם `leads`, `customers`, `contacts`, `mortgage-files`, `tasks` ו-`lists`. כל הנתיבים המקוננים תחת תיק משכנתא (`/mortgage-files/{id}/...`, כמו לווים, הערות, חיובים ואבני דרך) נבדקים מול המשאב `mortgage-files`. ערכי ההרשאה האפשריים: | ערך | משמעות | |---|---| | `admin` או `*` | גישה מלאה לכל המשאבים ולכל הפעולות | | `leads:*` | כל הפעולות על משאב אחד | | `leads:read`, `leads:write`, `leads:delete` | פעולה אחת על משאב אחד | | `read` | קריאה מכל המשאבים | | `write` | יצירה ועדכון בכל המשאבים (**בלי** מחיקה) | במסך יצירת המפתח יש ארבע אפשרויות מוכנות: **קריאה בלבד** (`read`), **קריאה וכתיבה** (`read` + `write`, בלי מחיקה), **גישה מלאה** (`admin`) ו**מותאם**, שבו בוחרים משאב ופעולה בטבלה. מחיקה דורשת תמיד הרשאה מפורשת: `admin`/`*`, `resource:*` או `resource:delete`. דוגמה: למפתח של טופס לידים באתר מספיק `leads:write`. לדשבורד BI מספיק `read`. ## תשובות אימות | סטטוס | מתי | מה לעשות | |---|---|---| | `401 Unauthorized` | המפתח חסר, לא תקין או בוטל | בדקו את הכותרת ואת המפתח. השדה `reason` מפרט את הסיבה. | | `403 Forbidden` | המפתח תקין אבל אין לו הרשאה לפעולה הזו על המשאב | הוסיפו הרשאה או צרו מפתח ייעודי | ערכי `reason` בתשובת 401: | `reason` | משמעות | |---|---| | `missing_api_key` | הכותרת `x-api-key` לא נשלחה או ריקה | | `malformed_api_key` | המפתח מכיל רווחים או תווים לא חוקיים (בדרך כלל שגיאת העתקה) | | `invalid_api_key` | המפתח לא קיים או בוטל | | `auth_service_error` | תקלה זמנית בשירות האימות. נסו שוב בעוד כמה שניות | ```json { "reason": "invalid_api_key", "error": "Unauthorized", "status": 401 } ``` ## CORS ה-API מחזיר כותרות CORS פתוחות, כדי שכפתור "נסו את הבקשה" בתיעוד יעבוד מהדפדפן. זה **לא** אומר שמותר לקרוא ל-API מקוד צד-לקוח בפרודקשן: כל מי שיפתח את כלי המפתחים יראה את המפתח. בנו שכבת שרת (backend, פונקציית serverless או כלי אוטומציה) שמחזיקה את המפתח. --- # עימוד, חיפוש ומבנה תגובות ## מבנה התגובה | סוג קריאה | סטטוס | גוף התגובה | |---|---|---| | רשימה (`GET /leads`) | `200` | אובייקט `{ "data": [...], "count": N }` | | רשומה בודדת (`GET /leads/{id}`) | `200` | הרשומה עצמה | | יצירה (`POST`) | `201` | הרשומה שנוצרה, כולל `id` | | עדכון (`PUT` / `PATCH`) | `200` | הרשומה המעודכנת | | מחיקה (`DELETE`) | `200` | אישור, למשל `{ "success": true, "message": "..." }` | ברשימות מעומדות, `count` הוא המספר הכולל של הרשומות שתואמות לשאילתה, לא רק אלה שבעמוד הנוכחי. ברשימות קצרות שאינן מעומדות (למשל לווים בתיק), `count` שווה לאורך המערך. ## עימוד רשימות גדולות מעומדות עם שני פרמטרים: | פרמטר | ברירת מחדל | מקסימום | תיאור | |---|---|---|---| | `limit` | `50` | `500` | מספר הרשומות בעמוד | | `offset` | `0` | `1000000` | כמה רשומות לדלג | ערך לא חוקי (שלילי, לא מספרי) לא מחזיר שגיאה: הוא מוחלף בברירת המחדל. ערך גדול מהמקסימום מוגבל למקסימום. התוצאות ממוינות מהחדש לישן (`created_at` יורד), אלא אם צוין אחרת בנקודת הקצה. מעבר על כל הרשומות: ```js async function fetchAll(path) { const limit = 500 const all = [] for (let offset = 0; ; offset += limit) { const res = await fetch(`https://app.banta.co.il/api-service${path}?limit=${limit}&offset=${offset}`, { headers: { 'x-api-key': process.env.BANTA_API_KEY }, }) if (!res.ok) throw new Error(`HTTP ${res.status}`) const { data, count } = await res.json() all.push(...data) if (data.length < limit || all.length >= count) return all } } ``` > במעבר על הרבה עמודים שימו לב ל[מגבלת הקצב](https://docs.banta.co.il/he/guides/rate-limits.md), 60 בקשות בדקה. 500 רשומות בעמוד הן הדרך היעילה ביותר. ## חיפוש נקודות קצה שתומכות בחיפוש מקבלות את הפרמטר `search`. החיפוש אינו רגיש לאותיות גדולות וקטנות, ומחפש את הביטוי בתוך כמה שדות במקביל (למשל שם, טלפון ואימייל). השדות המדויקים מפורטים בכל נקודת קצה. ```bash curl "https://app.banta.co.il/api-service/customers?search=ישראלי" -H "x-api-key: $BANTA_API_KEY" ``` התווים `, ( ) % _ \ " '` מוסרים מהביטוי לפני החיפוש. חפשו מספר טלפון כפי שהוא שמור, עם מקפים או בלעדיהם. ## סינון חלק מהרשימות מקבלות פרמטרי סינון נוספים, למשל `status` ברשימת הלידים. הפרמטרים הזמינים מפורטים בכל נקודת קצה. ## PUT מול PATCH במשאבים שתומכים בשניהם, `PUT` ו-`PATCH` מתנהגים אותו דבר: **עדכון חלקי**. נשלחים רק השדות שרוצים לשנות, ושדות שלא נשלחו נשארים כפי שהם. שדות שאינם ניתנים לעדכון (כמו `id`, `organization_id` ו-`created_at`) מתעלמים מהם בשקט. אם לא נשלח אף שדה שניתן לעדכן, מוחזרת שגיאה `400 No updatable fields provided`. ## ערכים קבועים ערכי enum (סוגי תעסוקה, סוגי משכנתא, סטטוסים וכדומה) זמינים מנקודות הקצה תחת [רשימות מערכת](https://docs.banta.co.il/he/#tag/lists). השתמשו בהן כדי לבנות טפסים ולא לקודד את הערכים בקוד. סטטוסי לידים ותיקים יכולים להיות מותאמים לארגון, ולכן שלפו אותם מ-`/leads/statuses` ומ-`/mortgage-files/statuses`. --- # שגיאות ## מבנה תשובת שגיאה כל שגיאה מוחזרת כ-JSON באותו מבנה: ```json { "error": "Lead not found or access denied", "details": "...", "status": 404 } ``` | שדה | תמיד? | תיאור | |---|---|---| | `error` | כן | תיאור קצר וקבוע של השגיאה (באנגלית). אפשר להסתמך עליו בלוגים ובהתראות. | | `status` | כן | קוד הסטטוס של HTTP, זהה לסטטוס של התגובה. | | `details` | לא | הסבר נוסף, כשיש כזה. | | `reason` | ב-401 | הסיבה לכשל האימות. ראו [אימות והרשאות](https://docs.banta.co.il/he/guides/authentication.md). | | `retry_after` | ב-429 | מועד פתיחת חלון הבקשות הבא (ISO 8601). | | `code` | לפעמים | קוד שגיאת מסד נתונים, כשהוא בטוח לחשיפה: ב-400 (למשל `23514` לסטטוס שלא הוגדר בארגון), ב-409 (`23505`, ערך כפול) וב-500. | שגיאות מסוימות מוסיפות שדות הקשר, למשל `existing_link_id` כשמנסים לקשר איש קשר שכבר מקושר לתיק. ## קודי סטטוס | סטטוס | משמעות | מה לעשות | |---|---|---| | `400 Bad Request` | גוף לא תקין (JSON שבור או לא אובייקט), שדה חובה חסר, ערך לא חוקי (למשל סטטוס לא מוכר, מזהה בפורמט שגוי, או מזהה של ארגון אחר), או עדכון בלי אף שדה שניתן לעדכן | תקנו את הבקשה. אל תנסו שוב כמו שהיא. | | `401 Unauthorized` | מפתח API חסר, לא תקין, שפג תוקפו או שבוטל | בדקו את `reason` | | `403 Forbidden` | למפתח אין הרשאה לפעולה על המשאב | הוסיפו הרשאה למפתח | | `404 Not Found` | הרשומה לא קיימת, נמחקה או שייכת לארגון אחר, או שהנתיב לא נתמך | בדקו את המזהה ואת הנתיב | | `405 Method Not Allowed` | שיטת ה-HTTP לא נתמכת בנתיב הזה | בדקו בתיעוד אילו שיטות זמינות | | `409 Conflict` | הפעולה מתנגשת במצב הקיים: קישור שכבר קיים, הערה נעולה, תשלום שבוטל, או ערך ייחודי כפול (כמו מספר זהות) | קראו את הרשומה הקיימת והחליטו מה לעשות | | `429 Too Many Requests` | חריגה ממגבלת הקצב | המתינו עד `retry_after`. ראו [מגבלות קצב](https://docs.banta.co.il/he/guides/rate-limits.md). | | `500 Internal Server Error` | תקלה בצד של banta | נסו שוב עם המתנה הולכת וגדלה. אם זה חוזר, פנו לתמיכה. | > ה-API מחזיר `404` גם על רשומה שקיימת בארגון אחר. כך אי אפשר לגלות אם מזהה מסוים קיים במערכת. ## ניסיונות חוזרים - **כדאי לנסות שוב:** `429`, `500`, ושגיאות רשת או timeout. השתמשו בהמתנה מעריכית (למשל 1, 2, 4, 8 שניות) עם מעט אקראיות. - **אין טעם לנסות שוב בלי לשנות משהו:** `400`, `401`, `403`, `404`, `405`, `409`. - **זהירות עם `POST` אחרי timeout:** ייתכן שהבקשה הראשונה הצליחה. ה-API לא תומך כרגע ב-idempotency keys, ולכן לפני שליחה חוזרת של יצירה כדאי לבדוק עם `search` אם הרשומה כבר נוצרה. --- # מגבלות קצב ## המגבלה כל מפתח API מוגבל ל-**60 בקשות בחלון של 60 שניות**. החלון נפתח עם הבקשה הראשונה ומתאפס 60 שניות אחריה. המגבלה היא לכל מפתח בנפרד, ולא לארגון. בקשה שחורגת מהמגבלה מקבלת `429 Too Many Requests` ולא מבוצעת: ```json { "retry_after": "2026-10-14T09:31:00.000Z", "error": "Too Many Requests", "details": "Rate limit exceeded (61 requests in window)", "status": 429 } ``` `retry_after` הוא המועד שבו נפתח החלון הבא. ה-API לא מחזיר כותרת `Retry-After`, ולכן קראו את השדה מגוף התגובה. ## איך לעמוד במגבלה - **עמודים גדולים** - בשליפת רשימות השתמשו ב-`limit=500`. עמוד אחד של 500 רשומות שווה 10 עמודים של 50. - **סנכרון הדרגתי** - בסנכרון תקופתי שמרו את מועד הריצה הקודמת ועבדו רק על מה שהשתנה, במקום לשלוף הכול בכל פעם. - **תור בצד שלכם** - אם האינטגרציה יוצרת הרבה רשומות בבת אחת (למשל ייבוא), שלחו אותן מתור בקצב של עד בקשה בשנייה. - **מפתח לכל אינטגרציה** - כך עומס של מערכת אחת לא חוסם מערכת אחרת, וגם קל יותר לבטל מפתח בודד. - **טיפול ב-429** - המתינו עד `retry_after` ורק אז שלחו שוב. ```js async function bantaFetch(url, init, attempt = 0) { const res = await fetch(url, init) if (res.status !== 429 || attempt >= 3) return res const body = await res.json().catch(() => ({})) const waitMs = body.retry_after ? Math.max(0, new Date(body.retry_after).getTime() - Date.now()) + 250 : 2 ** attempt * 1000 await new Promise((r) => setTimeout(r, waitMs)) return bantaFetch(url, init, attempt + 1) } ``` אם האינטגרציה שלכם צריכה קצב גבוה יותר באופן קבוע, פנו אלינו ב-[support@banta.co.il](mailto:support@banta.co.il). --- # סוכני AI ו-MCP יש שתי דרכים לעבוד עם banta מתוך כלי AI: 1. **לתת לסוכן לקרוא את התיעוד** כדי שיכתוב בשבילכם קוד אינטגרציה מול ה-API. ראו "תיעוד לסוכני AI" בהמשך. 2. **לחבר את הסוכן ישירות לנתוני הארגון** דרך שרת ה-MCP של banta, כדי שיחפש, יסכם ויבצע פעולות בעצמו. ראו "חיבור דרך MCP". ## תיעוד לסוכני AI (גרסת LLM) כל התיעוד מתפרסם גם כטקסט נקי שמודלי שפה קוראים בקלות. הקבצים מתעדכנים אוטומטית עם כל עדכון של ה-API. הגרסה העברית נמצאת תחת `/he/`, והאנגלית (ברירת המחדל) בשורש האתר. לסוכני קוד מומלצת האנגלית. | עברית | אנגלית | תוכן | |---|---|---| | [`/he/llms.txt`](https://docs.banta.co.il/he/llms.txt) | [`/llms.txt`](https://docs.banta.co.il/llms.txt) | אינדקס לפי התקן [llmstxt.org](https://llmstxt.org): קישור לכל מדריך ולכל נקודת קצה | | [`/he/llms-full.txt`](https://docs.banta.co.il/he/llms-full.txt) | [`/llms-full.txt`](https://docs.banta.co.il/llms-full.txt) | כל התיעוד בקובץ אחד: מדריכים ו-reference מלא | | `/he/guides/.md` | `/guides/.md` | כל מדריך כקובץ Markdown, למשל [`/he/guides/authentication.md`](https://docs.banta.co.il/he/guides/authentication.md) | | `/he/reference/.md` | `/reference/.md` | כל נקודת קצה כקובץ Markdown, למשל [`/he/reference/createLead.md`](https://docs.banta.co.il/he/reference/createLead.md) | | [`/he/openapi.json`](https://docs.banta.co.il/he/openapi.json) | [`/openapi.json`](https://docs.banta.co.il/openapi.json) · [`/openapi.yaml`](https://docs.banta.co.il/openapi.yaml) | מסמך OpenAPI מלא, לייבוא ל-Postman, ל-Insomnia או למחוללי SDK | **כפתורים באתר:** - **שאלו AI** (בכותרת העליונה) - פותח את ChatGPT, את Claude או את Perplexity עם הוראה לקרוא את `llms-full.txt`. - **העתקה כ-Markdown** (בכל נקודת קצה) - מעתיק את התיעוד של נקודת הקצה, מוכן להדבקה בצ'אט. **לסוכני קוד (Claude Code, Cursor, Copilot)** - הוסיפו לפרומפט או לקובץ ההנחיות של הפרויקט: ```text The banta API reference is at https://docs.banta.co.il/llms.txt (index) and https://docs.banta.co.il/llms-full.txt (full). Read it before writing integration code. Auth: header x-api-key. Base URL: https://app.banta.co.il/api-service ``` ## חיבור דרך MCP שרת ה-MCP של banta חושף לסוכני AI כלים לעבודה עם נתוני הארגון: חיפוש לידים ותיקים, סיכום תיק, יצירת משימות ותזכורות ועוד. כתובת השרת: ```text https://db.banta.co.il/functions/v1/mcp-server ``` ### אימות - **OAuth (מומלץ)** - מדביקים את הכתובת בלקוח ה-MCP. הלקוח מפנה למסך התחברות ואישור של banta, ומשם הכול אוטומטי. כברירת מחדל רק מנהלי הארגון יכולים לאשר חיבור. אפשר לפתוח את האפשרות לכל המשתמשים, או לכבות חיבורים חיצוניים לגמרי, ב[הגדרות הארגון ← אינטגרציות ← AI](https://app.banta.co.il/organization/settings?group=integrations&tab=ai). - **טוקן גישה** - ללקוחות שתומכים בכותרות מותאמות. יוצרים טוקן (מתחיל ב-`bnt_mcp_`) באותו מסך הגדרות ושולחים אותו בכותרת `Authorization: Bearer `. ### חיבור לפי לקוח - **Claude (claude.ai ואפליקציית Desktop)** - Settings ← Connectors ← Add custom connector, מדביקים את כתובת השרת ומאשרים במסך של banta. - **Claude Code** - `claude mcp add --transport http banta https://db.banta.co.il/functions/v1/mcp-server` - **Cursor / VS Code** - כפתור ההתקנה בכותרת העליונה של אתר התיעוד מוסיף את השרת בלחיצה. - **ChatGPT (GPT Actions)** - ב-Configure ← Actions ← Import from URL, מייבאים את `https://db.banta.co.il/functions/v1/mcp-server/openapi.json`. ב-Authentication בוחרים API Key מסוג Bearer ומדביקים טוקן גישה. ### מה הסוכן יכול לעשות - הכלים הזמינים נקבעים במדיניות הארגון, ואפשר לצמצם אותם עוד יותר לכל טוקן. - פעולות רגישות (כספים, שינויי סטטוס ומחיקות) עשויות לדרוש אישור של משתמש במערכת. במקרה כזה הסוכן יקבל `approval_required`, והפעולה תבוצע רק אחרי שהבקשה תאושר ב-banta. - כל קריאה של סוכן נרשמת ביומן הביקורת של הארגון. --- # עדכונים שינויים ב-API, מהחדש לישן. שינויים שוברים מסומנים **[שובר]** ומתפרסמים כאן מראש. ## אוקטובר 2026 - אתר התיעוד הציבורי עלה בכתובת https://docs.banta.co.il באנגלית ובעברית, כולל גרסת LLM (`llms.txt`, `llms-full.txt` ו-Markdown לכל נקודת קצה) ומדריכים לאימות, להרשאות, לעימוד, לשגיאות ולמגבלות קצב. - מסמך ה-OpenAPI עבר לאנגלית ועודכן כך שיתאים להתנהגות בפועל: תשובות שגיאה אחידות (401/403/404/429/500) בכל נקודות הקצה, ושדות חסרים בחיובים ובאבני דרך. שמות התגיות בספק הם עכשיו באנגלית (למשל `Leads`). - `GET /api-docs/openapi.json` מחזיר שוב את הספק המלא. עד כה הוחזרה גרסה מקוצרת וישנה. - **אבטחה** - מזהים שנשלחים בגוף הבקשה (`customer_id`, `lead_id`, `source_lead_id`, `parent_task_id`, `recipient_user_id`, `charge_id`) נבדקים מול הארגון. מזהה של ארגון אחר מחזיר 400. - **[שובר] הרשאות** - ההרשאה הכללית `write` כבר לא מתירה `DELETE`, בהתאם לאפשרות "קריאה וכתיבה" באפליקציה. מחיקה דורשת `admin`, `resource:*` או `resource:delete`. - **מחיקות** - `DELETE /mortgage-files/{id}` ו-`DELETE /customers/{id}` מוחקים את הרשומה בפועל. עד כה הוחזרה הצלחה בלי שהרשומה נמחקה. - **סטטוסים** - לידים מקבלים את הסטטוסים המותאמים של הארגון. תיק חדש מקבל את סטטוס ברירת המחדל של הארגון (או `setup`) במקום הערך הלא תקין `new`. `GET /mortgage-files/statuses` מחזיר את סטטוסי המערכת האמיתיים, `GET /mortgage-files/{id}/status-history` עובד, ושינוי סטטוס תיק שומר את `notes` כ-`status_comment`. שינוי סטטוס ליד שומר את `notes` בהיסטוריית הסטטוסים בלבד, ולא דורס עוד את ההערות של הליד. - **משימות** - יצירת משימות עובדת. ערכי הסטטוס הם `open`, `in_progress`, `completed` ו-`cancelled` (`done` מתקבל כ-`completed`), ו-`completed_at` נקבע ומתאפס אוטומטית. - **הערות** - אפשר לשחרר הערה נעולה עם `is_locked: false`. - **שגיאות** - ערכים שמסד הנתונים דוחה מחזירים 400 (וכפילויות 409) במקום 500, ו-`child_errors` מכיל קודי שגיאה בלבד. - `GET /customers/{id}/mortgage-files` מחזיר `{ data, count }` עם תיקי הלקוח. ## אוגוסט 2026 - **חיובים** - אפשר לקשר חיוב לאבן דרך עם `milestone_id` ו-`milestone_status_key` (חייבים להישלח יחד) ולהגדיר `milestone_due_offset_days`. כשאבן הדרך מושלמת, תאריך הגבייה נקבע אוטומטית. תאריך שהוזן ידנית לא נדרס. - **לידים** - `DELETE /leads/{id}` מוחק את הליד לצמיתות. אי אפשר לשחזר ליד שנמחק. ## מאי 2026 - נוספו נקודות קצה מקוננות תחת תיק משכנתא: הערות, אנשי קשר בתיק, עוקבים, מסמכים, חתימות, מסמכים מיוצרים, סטטוס מסמכים, תזכורות, חיובים, תשלומים, ניתוחים, תמהילי מחשבון, שדות מותאמים ואבני דרך. - נוספו משימות ברמה העליונה (`/tasks`), שמקושרות לתיק, לליד או ללקוח, או עומדות בפני עצמן. - הרשאות לפי משאב ופעולה (`leads:read` וכדומה) לצד ההרשאות הכלליות. ## אפריל 2026 - הקשחת אבטחה: המפתחות נשמרים כגיבוב בלבד, תשובות 401 מפרטות את הסיבה (`reason`), נוספה מגבלת קצב של 60 בקשות בדקה לכל מפתח, וגודל העמוד ברשימות הוגבל ל-500. - יומן ביקורת לכל פעולת כתיבה. ## ינואר 2026 - נוספו אנשי קשר (`/contacts`), רשימות מערכת (`/lists`) ונקודות קצה לסטטוסים של לידים ותיקים. - תמיכה בהכנסות, בחשבונות בנק ובהתחייבויות בעת יצירת תיק משכנתא, ובסוגי זיהוי נוספים ללווים (דרכון, עמותה, חברה). --- # banta API - **OpenAPI Version:** `3.2.0` - **API Version:** `1.0.0` - **Contact:** צוות התמיכה של banta ממשק REST לניהול הנתונים של הארגון ב-banta: לידים, לקוחות, אנשי קשר, משימות ותיקי משכנתא, כולל תתי-המשאבים של התיק (לווים, מסמכים, חיובים, תשלומים, אבני דרך ועוד). כל בקשה מזדהה במפתח API בכותרת `x-api-key`, וכל הפעולות מוגבלות לנתוני הארגון שהמפתח שייך אליו. גופי הבקשה והתגובה הם JSON, ושגיאות מוחזרות במבנה אחיד (ErrorResponse). ## Servers - **URL:** `https://app.banta.co.il` - **Description:** פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). ## Tags ### Leads פניות של לקוחות פוטנציאליים: יצירה, עדכון, שינוי סטטוס ומחיקה לצמיתות ### Mortgage files תיקי משכנתא: יצירה (כולל לווים, הכנסות והתחייבויות), עדכון, שינוי סטטוס ומחיקה ### Borrowers הלווים בתיק משכנתא. כל לווה מקושר לרשומת לקוח ### Customers לקוחות הארגון - האנשים והגופים שמשמשים לווים בתיקים ### Contacts אנשי קשר מקצועיים של הארגון: בנקאים, שמאים, עורכי דין ועוד ### Lists רשימות ערכים קבועות של המערכת (קריאה בלבד): סוגי תעסוקה, סוגי משכנתא, סטטוסי מסמכים ועוד ### Timeline אירועי ציר הזמן של תיק משכנתא (קריאה בלבד) ### Tasks משימות - מקושרות לתיק, ליד או לקוח, או עצמאיות ### Notes הערות חופשיות על תיק משכנתא ### File contacts קישור אנשי הקשר של הארגון לתיק משכנתא ### Watchers משתמשי הארגון שעוקבים אחר תיק משכנתא ### Documents מסמכי הלקוח בתיק ודרישות המסמכים של התיק (קריאה בלבד) ### Signatures חתימות הלווים על מסמכי התיק (קריאה בלבד) ### Generated documents מסמכים שהופקו מתבניות עבור התיק (קריאה בלבד) ### Document statuses מעקב אחר המסמכים שנדרשו מהלווים בתיק ועדכון הסטטוס שלהם ### Reminders תזכורות מתוזמנות על תיק משכנתא ### Charges חיובים (דרישות תשלום) על תיק, כולל קישור לאבני דרך ### Payments תשלומים שהתקבלו על תיק ### File analysis ניתוחים שמורים על תיק (JSON חופשי) ### Calculator mixes תמהילי משכנתא שנשמרו על התיק מהמחשבון ### Custom fields ערכי השדות המותאמים שהארגון הגדיר לתיקי משכנתא ### Milestones אבני הדרך של התיק: תצוגה משולבת, אבני דרך מותאמות, התקדמות ופריטי צ'קליסט ## Operations ### שליפת רשימת לידים - **Method:** `GET` - **Path:** `/api-service/leads` - **Operation ID:** `getLeads` - **Tags:** Leads מחזיר את לידי הארגון (ללא לידים שנמחקו), מהחדש לישן, עם דפדוף. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` ##### `status` - **In:** `query` סינון לפי סטטוס. לידים בסטטוס מותאם אישית שמורים עם status=custom `string`, possible values: `"new", "contacted", "qualified", "converted", "lost", "custom"` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בשם פרטי, שם משפחה, טלפון ואימייל. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` #### Responses ##### Status: 200 רשימת לידים ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Lead` — ליד - פנייה של לקוח פוטנציאלי. התגובה עשויה לכלול עמודות נוספות שאינן מתועדות כאן. - **`first_name` (required)** `string` — שם פרטי - **`last_name` (required)** `string` — שם משפחה - **`phone` (required)** `string` — מספר טלפון - **`additional_details`** `object` — פרטים נוספים (מבנה גמיש) **Additional properties:** any (true schema) - **`assigned_to`** `string | null`, format: `uuid` — מזהה המשתמש שהליד הוקצה לו (null אם לא הוקצה) - **`borrowers_data`** `array` — נתוני הלווים הפוטנציאליים **Items:** schema: `LeadBorrower` — נתוני לווה פוטנציאלי בליד - **`first_name` (required)** `string` — שם פרטי - **`last_name` (required)** `string` — שם משפחה - **`birth_date`** `string`, format: `date` — תאריך לידה - **`email`** `string`, format: `email` — כתובת אימייל - **`employment_type`** `string` — סוג תעסוקה - **`id_number`** `string` — מספר תעודת זהות - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`monthly_income`** `number` — הכנסה חודשית - **`phone`** `string` — מספר טלפון - **`relationship_type`** `string`, possible values: `"main", "spouse", "business_partner", "co_borrower", "guarantor", "siblings", "other"` — סוג קשר - **`converted_to_customer`** `string`, format: `uuid` — מזהה הלקוח שאליו הומר הליד (אם הומר) - **`converted_to_mortgage_file_id`** `string`, format: `uuid` — מזהה תיק המשכנתא שנוצר מהליד (אם הומר) - **`created_at`** `string`, format: `date-time` — תאריך יצירה - **`created_by`** `string`, format: `uuid` — מזהה המשתמש שיצר את הליד - **`custom_fields_leads`** `object` — שדות מותאמים אישית שהארגון הגדיר **Additional properties:** any (true schema) - **`email`** `string`, format: `email` — כתובת אימייל - **`financial_data`** `object` — נתונים פיננסיים - **`existing_obligations`** `number` — התחייבויות קיימות - **`monthly_income`** `number` — הכנסה חודשית - **`savings`** `number` — חסכונות - **`first_response_time`** `string`, format: `date-time` — זמן התגובה הראשונה לליד - **`has_property`** `boolean` — האם יש נכס בבעלות - **`id`** `string`, format: `uuid` — מזהה הליד - **`landing_path`** `string` — נתיב דף הנחיתה שבו נקלט הליד - **`lead_number`** `string` — מספר ליד ייחודי (נוצר אוטומטית) - **`mortgage_purpose`** `string` — מטרת המשכנתא (רכישה, מחזור, שיפוץ וכו') - **`mortgage_request_data`** `object` — נתוני בקשת המשכנתא - **`loan_purpose`** `string` — מטרת ההלוואה - **`property_location`** `string` — מיקום הנכס - **`property_type`** `string` — סוג הנכס - **`property_value`** `number` — שווי הנכס - **`notes`** `string` — הערות כלליות - **`organization_id`** `string`, format: `uuid` — מזהה הארגון - **`referrer_url`** `string` — כתובת ההפניה שממנה הגיע הליד - **`required_amount`** `number` — סכום המשכנתא הנדרש - **`source`** `string` — מקור הליד. ליד שנוצר דרך ה-API בלי source מקבל את הערך api - **`status`** `string`, possible values: `"new", "contacted", "qualified", "converted", "lost", "custom"` — סטטוס הליד. custom מציין סטטוס מותאם אישית של הארגון, שהמפתח שלו שמור ב-status_custom - **`status_changed_at`** `string`, format: `date-time` — תאריך שינוי סטטוס אחרון - **`status_custom`** `string | null` — מפתח הסטטוס המותאם אישית (כאשר status=custom) - **`team_id`** `string`, format: `uuid` — מזהה הצוות שהליד שייך אליו - **`total_income`** `number` — הכנסה חודשית כוללת של כל הלווים - **`updated_at`** `string`, format: `date-time` — תאריך עדכון אחרון - **`utm_campaign`** `string` — פרמטר utm_campaign שנקלט עם הליד - **`utm_content`** `string` — פרמטר utm_content שנקלט עם הליד - **`utm_medium`** `string` — פרמטר utm_medium שנקלט עם הליד - **`utm_source`** `string` — פרמטר utm_source שנקלט עם הליד - **`utm_term`** `string` — פרמטר utm_term שנקלט עם הליד **Example:** ```json { "data": [ { "id": "", "organization_id": "", "lead_number": "", "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "new", "status_custom": null, "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null, "team_id": "", "borrowers_data": [ { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ], "mortgage_request_data": { "property_type": "", "property_value": 1, "property_location": "", "loan_purpose": "" }, "financial_data": { "monthly_income": 1, "existing_obligations": 1, "savings": 1 }, "additional_details": { "additionalProperty": "anything" }, "custom_fields_leads": { "additionalProperty": "anything" }, "converted_to_customer": "", "converted_to_mortgage_file_id": "", "utm_source": "", "utm_medium": "", "utm_campaign": "", "utm_term": "", "utm_content": "", "referrer_url": "", "landing_path": "", "status_changed_at": "", "first_response_time": "", "created_at": "", "updated_at": "", "created_by": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת ליד - **Method:** `POST` - **Path:** `/api-service/leads` - **Operation ID:** `createLead` - **Tags:** Leads יוצר ליד חדש בארגון. - חובה: first_name, last_name ו-phone (ערכים לא ריקים). שדה חסר מחזיר 400, והשדות החסרים מפורטים ב-validation. - ברירות מחדל: status=new, source=api, has_property=false. - status - סטטוס מערכת או סטטוס מותאם של הארגון (ראו GET /leads/statuses); כל ערך אחר מחזיר 400. - assigned_to שאינו מזהה של משתמש פעיל בארגון מתעלמים ממנו, והליד נוצר ללא הקצאה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Request Body פרטי הליד החדש **Required:** `true` ##### Content-Type: application/json schema: `CreateLead` — נתונים ליצירת ליד. שדות שאינם מופיעים כאן מתעלמים מהם. - **`first_name` (required)** `string` — שם פרטי - **`last_name` (required)** `string` — שם משפחה - **`phone` (required)** `string` — מספר טלפון - **`assigned_to`** `string`, format: `uuid` — מזהה משתמש בארגון שהליד יוקצה לו. מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו, והליד נוצר ללא הקצאה - **`email`** `string`, format: `email` — כתובת אימייל - **`has_property`** `boolean`, default: `false` — האם יש נכס בבעלות - **`mortgage_purpose`** `string` — מטרת המשכנתא (רכישה, מחזור, שיפוץ וכו') - **`notes`** `string` — הערות כלליות - **`required_amount`** `number` — סכום המשכנתא הנדרש - **`source`** `string`, default: `"api"` — מקור הליד (למשל website, facebook, referral) - **`status`** `string`, default: `"new"` — סטטוס התחלתי: סטטוס מערכת או סטטוס מותאם של הארגון (ראו GET /leads/statuses) - **`total_income`** `number` — הכנסה חודשית כוללת של כל הלווים **Example: default** ```json { "first_name": "Dana", "last_name": "Levi", "phone": "050-0000000", "email": "dana.levi@example.com", "source": "website", "mortgage_purpose": "Second-hand apartment purchase", "required_amount": 1200000, "total_income": 28000, "has_property": false, "notes": "Prefers a call after 17:00" } ``` #### Responses ##### Status: 201 הליד נוצר ###### Content-Type: application/json *Schema `Lead` is shown above.* **Example: default** ```json { "id": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a6b", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "first_name": "Dana", "last_name": "Levi", "email": "dana.levi@example.com", "phone": "050-0000000", "source": "website", "status": "new", "status_custom": null, "notes": "Prefers a call after 17:00", "mortgage_purpose": "Second-hand apartment purchase", "required_amount": 1200000, "total_income": 28000, "has_property": false, "assigned_to": null, "created_at": "2026-10-14T08:15:22.481234+00:00", "updated_at": "2026-10-14T08:15:22.481234+00:00" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת ליד - **Method:** `GET` - **Path:** `/api-service/leads/{id}` - **Operation ID:** `getLeadById` - **Tags:** Leads מחזיר ליד לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הליד `string`, format: `uuid` #### Responses ##### Status: 200 פרטי הליד ###### Content-Type: application/json *Schema `Lead` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "lead_number": "", "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "new", "status_custom": null, "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null, "team_id": "", "borrowers_data": [ { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ], "mortgage_request_data": { "property_type": "", "property_value": 1, "property_location": "", "loan_purpose": "" }, "financial_data": { "monthly_income": 1, "existing_obligations": 1, "savings": 1 }, "additional_details": { "additionalProperty": "anything" }, "custom_fields_leads": { "additionalProperty": "anything" }, "converted_to_customer": "", "converted_to_mortgage_file_id": "", "utm_source": "", "utm_medium": "", "utm_campaign": "", "utm_term": "", "utm_content": "", "referrer_url": "", "landing_path": "", "status_changed_at": "", "first_response_time": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון ליד - **Method:** `PUT` - **Path:** `/api-service/leads/{id}` - **Operation ID:** `updateLead` - **Tags:** Leads עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. assigned_to=null (או מחרוזת ריקה) מבטל את ההקצאה; מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו. לשינוי סטטוס שנרשם בהיסטוריית הסטטוסים של הליד השתמשו ב-PATCH /leads/{id}/status. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הליד `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateLead` — עדכון חלקי של ליד: רק השדות שנשלחו מתעדכנים. שדות שאינם מופיעים כאן מתעלמים מהם. - **`assigned_to`** `string | null`, format: `uuid` — מזהה משתמש בארגון. null או מחרוזת ריקה מבטלים את ההקצאה; מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו - **`email`** `string`, format: `email` — כתובת אימייל - **`first_name`** `string` — שם פרטי - **`has_property`** `boolean` — האם יש נכס בבעלות - **`last_name`** `string` — שם משפחה - **`mortgage_purpose`** `string` — מטרת המשכנתא (רכישה, מחזור, שיפוץ וכו') - **`notes`** `string` — הערות כלליות - **`phone`** `string` — מספר טלפון - **`required_amount`** `number` — סכום המשכנתא הנדרש - **`source`** `string` — מקור הליד - **`status`** `string` — סטטוס הליד: סטטוס מערכת או סטטוס מותאם של הארגון (ראו GET /leads/statuses). לשינוי סטטוס שנרשם בהיסטוריית הסטטוסים השתמשו ב-PATCH /leads/{id}/status - **`total_income`** `number` — הכנסה חודשית כוללת של כל הלווים **Example:** ```json { "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "", "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null } ``` #### Responses ##### Status: 200 הליד המעודכן ###### Content-Type: application/json *Schema `Lead` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "lead_number": "", "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "new", "status_custom": null, "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null, "team_id": "", "borrowers_data": [ { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ], "mortgage_request_data": { "property_type": "", "property_value": 1, "property_location": "", "loan_purpose": "" }, "financial_data": { "monthly_income": 1, "existing_obligations": 1, "savings": 1 }, "additional_details": { "additionalProperty": "anything" }, "custom_fields_leads": { "additionalProperty": "anything" }, "converted_to_customer": "", "converted_to_mortgage_file_id": "", "utm_source": "", "utm_medium": "", "utm_campaign": "", "utm_term": "", "utm_content": "", "referrer_url": "", "landing_path": "", "status_changed_at": "", "first_response_time": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של ליד - **Method:** `PATCH` - **Path:** `/api-service/leads/{id}` - **Operation ID:** `patchLead` - **Tags:** Leads עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. assigned_to=null (או מחרוזת ריקה) מבטל את ההקצאה; מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו. לשינוי סטטוס שנרשם בהיסטוריית הסטטוסים של הליד השתמשו ב-PATCH /leads/{id}/status. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הליד `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateLead` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "", "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null } ``` #### Responses ##### Status: 200 הליד המעודכן ###### Content-Type: application/json *Schema `Lead` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "lead_number": "", "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "new", "status_custom": null, "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null, "team_id": "", "borrowers_data": [ { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ], "mortgage_request_data": { "property_type": "", "property_value": 1, "property_location": "", "loan_purpose": "" }, "financial_data": { "monthly_income": 1, "existing_obligations": 1, "savings": 1 }, "additional_details": { "additionalProperty": "anything" }, "custom_fields_leads": { "additionalProperty": "anything" }, "converted_to_customer": "", "converted_to_mortgage_file_id": "", "utm_source": "", "utm_medium": "", "utm_campaign": "", "utm_term": "", "utm_content": "", "referrer_url": "", "landing_path": "", "status_changed_at": "", "first_response_time": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### מחיקת ליד לצמיתות - **Method:** `DELETE` - **Path:** `/api-service/leads/{id}` - **Operation ID:** `deleteLead` - **Tags:** Leads מוחק את הליד **לצמיתות** (hard delete). הפעולה בלתי הפיכה - ללידים אין סל מחזור. רשומות שתלויות בליד בלבד נמחקות יחד איתו, ורשומות ששורדות בלעדיו (למשל תיק משכנתא שנוצר מהליד) נשארות ומתנתקות ממנו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הליד `string`, format: `uuid` #### Responses ##### Status: 200 הליד נמחק לצמיתות ###### Content-Type: application/json schema: `DeleteResult` — תוצאת מחיקה - **`message` (required)** `string` — הודעת אישור (באנגלית) - **`success` (required)** `boolean` **Example: default** ```json { "success": true, "message": "Lead permanently deleted" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון סטטוס ליד - **Method:** `PATCH` - **Path:** `/api-service/leads/{id}/status` - **Operation ID:** `updateLeadStatus` - **Tags:** Leads משנה את סטטוס הליד, מעדכן את status_changed_at ורושם את השינוי בהיסטוריית הסטטוסים של הליד. status יכול להיות סטטוס מערכת (new, contacted, qualified, converted, lost) או סטטוס מותאם של הארגון (השדה value ב-GET /leads/statuses); סטטוס מותאם נשמר כ-status=custom והמפתח שלו ב-status_custom. כל ערך אחר מחזיר 400. notes (אופציונלי) נשמר בהיסטוריית הסטטוסים בלבד. status חסר מחזיר 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הליד `string`, format: `uuid` #### Request Body הסטטוס החדש **Required:** `true` ##### Content-Type: application/json - **`status` (required)** `string` — הסטטוס החדש: סטטוס מערכת או סטטוס מותאם של הארגון (ראו GET /leads/statuses) - **`notes`** `string` — הערה לשינוי הסטטוס, נשמרת בהיסטוריית הסטטוסים **Example: default** ```json { "status": "contacted", "notes": "First call completed, meeting scheduled" } ``` #### Responses ##### Status: 200 הליד לאחר עדכון הסטטוס ###### Content-Type: application/json *Schema `Lead` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "lead_number": "", "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "new", "status_custom": null, "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null, "team_id": "", "borrowers_data": [ { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ], "mortgage_request_data": { "property_type": "", "property_value": 1, "property_location": "", "loan_purpose": "" }, "financial_data": { "monthly_income": 1, "existing_obligations": 1, "savings": 1 }, "additional_details": { "additionalProperty": "anything" }, "custom_fields_leads": { "additionalProperty": "anything" }, "converted_to_customer": "", "converted_to_mortgage_file_id": "", "utm_source": "", "utm_medium": "", "utm_campaign": "", "utm_term": "", "utm_content": "", "referrer_url": "", "landing_path": "", "status_changed_at": "", "first_response_time": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סטטוסי לידים - **Method:** `GET` - **Path:** `/api-service/leads/statuses` - **Operation ID:** `getLeadStatuses` - **Tags:** Leads מחזיר את הגדרת סטטוסי הלידים של הארגון. אם הארגון הגדיר סטטוסים משלו - source=custom והפריטים הם ההגדרות השמורות של הארגון (המבנה עשוי להיות שונה מברירת המחדל). אחרת - source=default ורשימת סטטוסי המערכת. את השדה value של פריט שולחים כ-status ב-POST /leads, ב-PUT/PATCH /leads/{id} וב-PATCH /leads/{id}/status. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סטטוסי הלידים ###### Content-Type: application/json - **`count`** `integer` — מספר הפריטים במערך data - **`data`** `array` — רשימת הסטטוסים **Items:** schema: `LeadStatus` — סטטוס ליד - כולל סטטוסים מותאמים אישית של הארגון - **`color`** `object` - **`bg`** `string` — צבע רקע (HEX) - **`text`** `string` — צבע טקסט (HEX) - **`is_default`** `boolean` — האם זה הסטטוס ברירת המחדל - **`label`** `string` — שם תצוגה בעברית - **`value`** `string` — מזהה הסטטוס (key) - **`source`** `string`, possible values: `"default", "custom"` — מקור הרשימה: הגדרות הארגון (custom) או ברירת המחדל (default) **Example: default** ```json { "data": [ { "value": "new", "label": "חדש", "color": { "bg": "#3498db", "text": "#ffffff" }, "is_default": true }, { "value": "contacted", "label": "נוצר קשר", "color": { "bg": "#f39c12", "text": "#ffffff" }, "is_default": false }, { "value": "qualified", "label": "מתאים", "color": { "bg": "#2ecc71", "text": "#ffffff" }, "is_default": false }, { "value": "converted", "label": "הומר ללקוח", "color": { "bg": "#1abc9c", "text": "#ffffff" }, "is_default": false }, { "value": "lost", "label": "אבוד", "color": { "bg": "#e74c3c", "text": "#ffffff" }, "is_default": false } ], "count": 5, "source": "default" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת רשימת תיקי משכנתא - **Method:** `GET` - **Path:** `/api-service/mortgage-files` - **Operation ID:** `getMortgageFiles` - **Tags:** Mortgage files מחזיר את תיקי הארגון (ללא תיקים שנמחקו), מהחדש לישן, עם דפדוף. כל תיק כולל את מערך borrowers - הלווים הפעילים בתיק. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` ##### `status` - **In:** `query` סינון לפי מפתח סטטוס (ראו GET /mortgage-files/statuses) `string` ##### `customer_id` - **In:** `query` סינון לתיקים של לקוח (הלקוח הראשי של התיק) `string`, format: `uuid` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, במספר התיק ובכותרת. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` #### Responses ##### Status: 200 רשימת תיקי משכנתא ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** **All of:** schema: `MortgageFile` — תיק משכנתא (רשומת התיק). התגובה עשויה לכלול עמודות פנימיות נוספות שאינן מתועדות כאן. - **`additional_expenses`** `array` — הוצאות נלוות (מס, עו"ד, תיווך וכו') **Items:** schema: `AdditionalExpense` — הוצאה נלווית לעסקה - **`amount` (required)** `number` — סכום ההוצאה - **`type` (required)** `string` — סוג ההוצאה (מס רכישה, עו"ד, תיווך וכו') - **`description`** `string` — תיאור נוסף - **`additional_info`** `object` — מידע נוסף מורחב **All of:** schema: `MortgageAdditionalInfo` — מידע נוסף על תיק משכנתא - **`general_notes`** `string` — הערות כלליות - **`important_info`** `object` — מידע חשוב - **`credit_report_status`** `string` — סטטוס דו"ח אשראי - **`equity_sources`** `string` — מקורות ההון העצמי - **`financial_issues_details`** `string` — פירוט בעיות פיננסיות - **`grace_period_months`** `integer` — מספר חודשי גרייס - **`has_financial_issues`** `boolean` — האם יש בעיות פיננסיות - **`has_grace_period`** `boolean` — האם יש תקופת גרייס - **`payment_day`** `integer` — יום התשלום בחודש - **`requested_monthly_payment`** `number` — החזר חודשי מבוקש - **`appraiser_value`** `number` — שווי הנכס לפי שמאי - **`assigned_to`** `string | null`, format: `uuid` — מזהה המשתמש שהתיק מוקצה לו (null אם לא הוקצה) - **`contract_date_payment`** `string` — תאריך תשלום לפי חוזה - **`created_at`** `string`, format: `date-time` — תאריך יצירה - **`created_by`** `string`, format: `uuid` — מזהה המשתמש שיצר את התיק - **`custom_fields_mortgage`** `object` — שדות מותאמים אישית שהארגון הגדיר **Additional properties:** any (true schema) - **`customer_id`** `string`, format: `uuid` — מזהה הלקוח הראשי של התיק - **`drive_folder_url`** `string` — קישור לתיקיית Google Drive - **`eligibility`** `number` — סכום זכאות (אם רלוונטי) - **`equity`** `number` — הון עצמי - **`file_number`** `string` — מספר התיק - **`financing_entity`** `object` — פרטי הגוף המממן (בנק) **All of:** schema: `FinancingEntity` — פרטי גוף מממן (בנק) - **`bank_name`** `string` — שם הבנק - **`branch_name`** `string` — שם הסניף - **`branch_number`** `string` — מספר סניף - **`contact_email`** `string`, format: `email` — אימייל איש קשר - **`contact_name`** `string` — שם איש קשר בבנק - **`contact_phone`** `string` — טלפון איש קשר - **`id`** `string`, format: `uuid` — מזהה התיק - **`interest_rate`** `number` — שיעור ריבית ממוצע - **`lead_id`** `string`, format: `uuid` — מזהה ליד מקושר - **`lead_source`** `string` — מקור הליד שהפך לתיק - **`loan_amount`** `number` — סכום המשכנתא המבוקש - **`loan_purpose`** `string` — מטרת ההלוואה - **`loan_term`** `integer` — תקופת ההלוואה בחודשים - **`monthly_payment`** `number` — החזר חודשי צפוי - **`notes`** `string` — הערות כלליות - **`organization_id`** `string`, format: `uuid` — מזהה הארגון - **`property_address`** `string` — כתובת הנכס המלאה - **`property_type`** `string` — סוג הנכס (דירה, בית פרטי, מגרש וכו') - **`property_value`** `number` — שווי הנכס לפי חוזה/הערכה - **`purposes`** `array` — מטרות המשכנתא **Items:** schema: `MortgagePurpose` — מטרת משכנתא (רכישה, מחזור, שיפוץ וכו') - **`amount` (required)** `number` — סכום הנדרש למטרה זו - **`type` (required)** `string` — סוג המטרה - מפתח מהרשימה GET /lists/mortgage-types (למשל second_hand, refinance) - **`details`** `string` — פרטים נוספים על המטרה - **`fields`** `object` — שדות מפורטים לפי סוג המטרה - **`appraiser_value`** `number` — שווי הנכס לפי שמאי - **`contract_date_payment`** `string` — תאריך תשלום לפי חוזה - **`eligibility`** `number` — סכום זכאות - **`equity`** `number` — הון עצמי - **`equity_amount`** `number` — סכום הון עצמי - **`existing_mortgage`** `number` — יתרת משכנתא קיימת - **`loan_amount`** `number` — סכום המשכנתא המבוקש - **`loan_purpose`** `string` — מטרת ההלוואה המפורטת - **`monthly_repayment`** `number` — החזר חודשי - **`mortgage_type`** `string` — סוג המשכנתא - **`property_value`** `number` — שווי הנכס - **`requested_mortgage`** `number` — משכנתא מבוקשת - **`required_date`** `string` — תאריך נדרש לקבלת המשכנתא - **`tax_declaration`** `string` — הצהרת מש"ח (ראשונה/שנייה/משפרי דיור) - **`real_estate_details`** `object` — פרטי נדל"ן מורחבים **Additional properties:** any (true schema) - **`remaining_mortgage`** `number` — יתרת משכנתא קיימת (למחזור) - **`source_lead_id`** `string`, format: `uuid` — מזהה הליד המקורי (אם הומר מליד) - **`source_lead_number`** `string` — מספר הליד המקורי - **`status`** `string` — מפתח הסטטוס של התיק: אחד מסטטוסי המערכת (setup, pending_approval, pending_appraisal, reviewing, signing, completed, paused, cancelled, active) או סטטוס מותאם שהארגון הגדיר. ראו GET /mortgage-files/statuses - **`status_changed_at`** `string`, format: `date-time` — תאריך שינוי הסטטוס האחרון - **`status_comment`** `string` — הערה לסטטוס הנוכחי - **`tax_declaration`** `string` — הצהרת מש"ח (ראשונה/שנייה/משפרי דיור) - **`title`** `string` — כותרת/שם התיק - **`total_amount`** `number` — סכום כולל של העסקה - **`updated_at`** `string`, format: `date-time` — תאריך עדכון אחרון * **`borrowers`** `array` — הלווים הפעילים בתיק **Items:** schema: `Borrower` — לווה בתיק משכנתא: רשומת השיוך לתיק (סוג קשר, סדר, סוג לווה) יחד עם פרטי הלקוח המקושר. פרטי הלקוח (שם, זיהוי, פרטי קשר וכו') שמורים ברשומת הלקוח ומשותפים לכל התיקים שבהם הוא לווה. - **`birth_date`** `string`, format: `date` — תאריך לידה - **`borrower_type`** `string`, possible values: `"regular", "paying_guarantor", "supporting_guarantor", "non_mortgaging_borrower"` — סוג הלווה - **`children_birth_dates`** `array` — תאריכי לידה של ילדים **Items:** `string`, format: `date` - **`children_under_18`** `integer` — מספר ילדים מתחת לגיל 18 - **`city`** `string` — עיר מגורים - **`created_at`** `string`, format: `date-time` — תאריך יצירה - **`custom_marital_status`** `string` — מצב משפחתי מותאם אישית (כאשר marital_status=other) - **`custom_relationship`** `string` — סוג קשר מותאם אישית (כאשר relationship_type=other) - **`customer_id`** `string`, format: `uuid` — מזהה הלקוח המקושר - **`email`** `string`, format: `email` — כתובת אימייל - **`entity_name`** `string` — שם התאגיד או העמותה (כאשר id_type הוא company או association) - **`first_name`** `string` — שם פרטי - **`foreign_citizenship`** `string` — שם המדינה של האזרחות הזרה - **`gender`** `string`, possible values: `"male", "female", "other"` — מגדר - **`has_children`** `boolean` — האם יש ילדים - **`has_foreign_citizenship`** `boolean` — האם יש אזרחות זרה - **`id`** `string`, format: `uuid` — מזהה הלווה (רשומת השיוך לתיק) - **`id_country`** `string` — המדינה שהנפיקה את מסמך הזיהוי (רלוונטי לדרכון) - **`id_expiry_date`** `string`, format: `date` — תאריך תפוגת מסמך הזיהוי - **`id_number`** `string` — מספר מסמך הזיהוי - **`id_type`** `string`, possible values: `"israeli_id", "passport", "association", "company"` — סוג מסמך הזיהוי - **`is_politically_exposed`** `boolean` — האם אישיות פוליטית מוכרת (PEP) - **`issue_date`** `string`, format: `date` — תאריך הנפקת מסמך הזיהוי - **`last_name`** `string` — שם משפחה - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`mortgage_file_id`** `string`, format: `uuid` — מזהה תיק המשכנתא - **`order_index`** `integer` — סדר הלווה בתיק (0 = לווה ראשי) - **`organization_id`** `string`, format: `uuid` — מזהה הארגון - **`phone`** `string` — מספר טלפון - **`preferred_contact_methods`** `array` — דרכי יצירת קשר מועדפות **Items:** `string`, possible values: `"email", "sms", "whatsapp", "voice", "no_sms"` - **`relationship_type`** `string`, possible values: `"main", "spouse", "business_partner", "siblings", "other"` — סוג הקשר של הלווה לתיק. לווה עם order_index=0 חייב להיות main - **`spouse_of_borrower_id`** `string`, format: `uuid` — מזהה הלווה שהוא בן/בת הזוג (בתיקים עם יותר מ-2 לווים) - **`street`** `string` — רחוב מגורים - **`updated_at`** `string`, format: `date-time` — תאריך עדכון אחרון schema: `MortgageFileDetails` — תיק משכנתא יחד עם הלווים הפעילים בו **Example:** ```json { "data": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "", "borrowers": [ { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ] } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת תיק משכנתא - **Method:** `POST` - **Path:** `/api-service/mortgage-files` - **Operation ID:** `createMortgageFile` - **Tags:** Mortgage files יוצר תיק משכנתא חדש, ואופציונלית - באותה בקשה - גם את הלווים, ההכנסות, חשבונות הבנק וההתחייבויות שלו. אין שדות חובה. - **status** - אם לא נשלח, נקבע סטטוס ברירת המחדל של הארגון (מוגדר בהגדרות סטטוסי התיקים באפליקציה), או `setup` אם לא הוגדר. ערך שנשלח חייב להיות סטטוס תקף בארגון: אחד מסטטוסי המערכת (setup, pending_approval, pending_appraisal, reviewing, signing, completed, paused, cancelled, active) או סטטוס מותאם שהארגון הגדיר (ראו GET /mortgage-files/statuses) - אחרת 400 (code 23514). - **customer_id / lead_id / source_lead_id** - חייבים להיות מזהים של רשומות פעילות בארגון - אחרת 400. - **file_number** - ה-API אינו מקצה מספר תיק אוטומטית. - **assigned_to** - מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו, והתיק נוצר ללא הקצאה. - **borrowers** - כל לווה נוצר כמו ב-POST /mortgage-files/{id}/borrowers (איתור או יצירה של לקוח לפי id_number). הלווה הראשון מקבל ברירת מחדל relationship_type=main והבאים spouse. - **incomes / bank_accounts / obligations** - נשמרים כפי שנשלחו. כשל ביצירת לווה או בשמירת הכנסות / חשבונות / התחייבויות אינו מבטל את יצירת התיק: התגובה היא 201, והכשלים מפורטים במערך child_errors. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Request Body פרטי התיק החדש **Required:** `true` ##### Content-Type: application/json schema: `CreateMortgageFile` — נתונים ליצירת תיק משכנתא. אין שדות חובה. שדות שאינם מופיעים כאן מתעלמים מהם. - **`additional_expenses`** `array` — הוצאות נלוות **Items:** *Schema `AdditionalExpense` is shown above.* - **`additional_info`** `object` — מידע נוסף מורחב **All of:** *Schema `MortgageAdditionalInfo` is shown above.* - **`appraiser_value`** `number` — שווי הנכס לפי שמאי - **`assigned_to`** `string`, format: `uuid` — מזהה משתמש בארגון שהתיק יוקצה לו. מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו, והתיק נוצר ללא הקצאה - **`bank_accounts`** `array` — חשבונות הבנק של הלווים. נשמרים כפי שנשלחו **Items:** schema: `BankAccount` — חשבון בנק - **`accountNumber` (required)** `string` — מספר חשבון - **`bankName` (required)** `string` — שם הבנק (קוד) - **`branchName` (required)** `string` — מספר סניף - **`bankDisplayName`** `string` — שם הבנק לתצוגה - **`borrowers`** `array` — מזהי/שמות הלווים המשויכים לחשבון **Items:** `string` - **`branchDisplayName`** `string` — שם הסניף - **`isJoint`** `boolean` — האם חשבון משותף - **`borrowers`** `array` — לווים ליצירה יחד עם התיק. כל פריט מטופל כמו POST /mortgage-files/{id}/borrowers; הראשון מקבל ברירת מחדל relationship_type=main והבאים spouse **Items:** schema: `CreateBorrower` — נתונים להוספת לווה לתיק. שדות הלקוח (שם, זיהוי, פרטי קשר וכו') נשמרים ברשומת הלקוח, ורק כאשר נשלח id_number - ראו תיאור הפעולה POST /mortgage-files/{id}/borrowers. - **`birth_date`** `string`, format: `date` — תאריך לידה - **`borrower_type`** `string`, possible values: `"regular", "paying_guarantor", "supporting_guarantor", "non_mortgaging_borrower"`, default: `"regular"` — סוג הלווה - **`children_birth_dates`** `array` — תאריכי לידה של ילדים **Items:** `string`, format: `date` - **`children_under_18`** `integer` — מספר ילדים מתחת לגיל 18 - **`city`** `string` — עיר מגורים - **`custom_marital_status`** `string` — מצב משפחתי מותאם אישית (כאשר marital_status=other) - **`custom_relationship`** `string` — סוג קשר מותאם אישית (כאשר relationship_type=other) - **`customer_id`** `string`, format: `uuid` — מזהה לקוח קיים לקישור. בשימוש רק כאשר לא נשלח id_number - **`email`** `string`, format: `email` — כתובת אימייל - **`entity_name`** `string` — שם התאגיד או העמותה (כאשר id_type הוא company או association) - **`first_name`** `string` — שם פרטי (נדרש כאשר נוצר לקוח חדש) - **`foreign_citizenship`** `string` — שם המדינה של האזרחות הזרה - **`gender`** `string`, possible values: `"male", "female", "other"` — מגדר - **`has_children`** `boolean` — האם יש ילדים - **`has_foreign_citizenship`** `boolean` — האם יש אזרחות זרה - **`id_country`** `string` — המדינה שהנפיקה את מסמך הזיהוי (רלוונטי לדרכון) - **`id_expiry_date`** `string`, format: `date` — תאריך תפוגת מסמך הזיהוי - **`id_number`** `string` — מספר מסמך הזיהוי. משמש לאיתור לקוח קיים בארגון או ליצירת לקוח חדש - **`id_type`** `string`, possible values: `"israeli_id", "passport", "association", "company"` — סוג מסמך הזיהוי. בלקוח חדש - ברירת מחדל israeli_id - **`is_politically_exposed`** `boolean` — האם אישיות פוליטית מוכרת (PEP) - **`issue_date`** `string`, format: `date` — תאריך הנפקת מסמך הזיהוי - **`last_name`** `string` — שם משפחה (נדרש כאשר נוצר לקוח חדש) - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`order_index`** `integer` — סדר הלווה בתיק (0 = הלווה הראשי). ברירת מחדל: מספר הלווים הקיימים בתיק - **`phone`** `string` — מספר טלפון - **`preferred_contact_methods`** `array` — דרכי יצירת קשר מועדפות **Items:** `string`, possible values: `"email", "sms", "whatsapp", "voice", "no_sms"` - **`relationship_type`** `string`, possible values: `"main", "spouse", "business_partner", "siblings", "other"` — סוג הקשר לתיק. ברירת מחדל: main ללווה הראשון בתיק, spouse לבאים. לווה עם order_index=0 חייב להיות main - **`street`** `string` — רחוב מגורים - **`contract_date_payment`** `string` — תאריך תשלום לפי חוזה - **`custom_fields_mortgage`** `object` — שדות מותאמים אישית **Additional properties:** any (true schema) - **`customer_id`** `string`, format: `uuid` — מזהה הלקוח הראשי של התיק (אופציונלי) - **`eligibility`** `number` — סכום זכאות - **`equity`** `number` — הון עצמי - **`file_number`** `string` — מספר התיק. ה-API אינו מקצה מספר אוטומטית - אם לא נשלח, התיק נוצר ללא מספר - **`financing_entity`** `object` — פרטי הגוף המממן (בנק) **All of:** *Schema `FinancingEntity` is shown above.* - **`incomes`** `object` — נתוני ההכנסות של הלווים. נשמרים כפי שנשלחו **All of:** schema: `Incomes` — נתוני הכנסות לתיק משכנתא - **`borrowers`** `array` — הכנסות לפי לווים **Items:** schema: `BorrowerIncome` — נתוני הכנסות של לווה - **`borrowerId`** `string`, format: `uuid` — מזהה הלווה - **`borrowerName`** `string` — שם הלווה - **`employments`** `array` — רשימת מקורות הכנסה/תעסוקה **Items:** schema: `EmploymentItem` — פריט תעסוקה/הכנסה - **`data`** `object` — נתוני התעסוקה לפי סוג - **`amount`** `string` — סכום - **`average_monthly_income`** `string` — הכנסה חודשית ממוצעת - **`business_name`** `string` — שם העסק (לעצמאי) - **`business_type`** `string` — סוג העסק - **`description`** `string` — תיאור (להכנסה אחרת) - **`employers`** `array` — רשימת מעסיקים (לשכיר) **Items:** - **`company_name`** `string` — שם החברה - **`end_date`** `string`, format: `date` — תאריך סיום עבודה - **`is_current`** `boolean` — האם עובד כרגע - **`position`** `string` — תפקיד - **`salary_slips`** `array` — תלושי משכורת **Items:** - **`amount`** `string` — סכום - **`date`** `string` — תאריך התלוש - **`start_date`** `string`, format: `date` — תאריך תחילת עבודה - **`institution`** `string` — מוסד המלגה - **`is_controlling_employee`** `boolean` — האם בעל שליטה - **`is_public_sector`** `boolean` — האם מגזר ציבורי - **`monthly_amount`** `string` — סכום חודשי (לפנסיה/קצבה) - **`scholarship_amount`** `string` — סכום המלגה - **`source`** `string` — מקור ההכנסה - **`years_active`** `number` — שנות פעילות - **`type`** `string`, possible values: `"salaried", "self_employed", "pension", "allowance", "scholarship", "other", "unemployed"` — סוג התעסוקה (שכיר, עצמאי, פנסיה, קצבה, מלגה, אחר, לא עובד) - **`interest_rate`** `number` — שיעור ריבית ממוצע - **`lead_id`** `string`, format: `uuid` — מזהה ליד מקושר - **`lead_source`** `string` — מקור הליד - **`loan_amount`** `number` — סכום המשכנתא המבוקש - **`loan_purpose`** `string` — מטרת ההלוואה - **`loan_term`** `integer` — תקופת ההלוואה בחודשים - **`monthly_payment`** `number` — החזר חודשי צפוי - **`notes`** `string` — הערות כלליות - **`obligations`** `array` — ההתחייבויות הפיננסיות של הלווים. נשמרות כפי שנשלחו **Items:** schema: `Obligation` — התחייבות פיננסית - **`monthlyPayment` (required)** `number` — תשלום חודשי - **`type` (required)** `string`, possible values: `"bank_loan", "non_bank_loan", "mortgage", "alimony", "rent", "other"` — סוג ההתחייבות (הלוואה בנקאית, הלוואה חוץ בנקאית, משכנתא, מזונות, שכירות, אחר) - **`assignedBorrowers`** `array` — מזהי הלווים שההתחייבות שייכת להם **Items:** `string` - **`bank_id`** `string` — מזהה בנק (להלוואות בנקאיות) - **`bankData`** `object` — פרטי הבנק - **`accountNumber`** `string` — מספר חשבון - **`bankDisplayName`** `string` — שם הבנק - **`bankName`** `string` — קוד הבנק - **`branchDisplayName`** `string` — שם הסניף - **`branchName`** `string` — מספר סניף - **`customType`** `string` — סוג מותאם אישית (כאשר type=other) - **`endDate`** `string`, format: `date` — תאריך סיום - **`id`** `string` — מזהה ייחודי להתחייבות - **`remainingAmount`** `number` — יתרה לסילוק - **`property_address`** `string` — כתובת הנכס המלאה - **`property_type`** `string` — סוג הנכס (דירה, בית פרטי, מגרש וכו') - **`property_value`** `number` — שווי הנכס - **`purposes`** `array` — מטרות המשכנתא (ברירת מחדל: מערך ריק) **Items:** *Schema `MortgagePurpose` is shown above.* - **`real_estate_details`** `object` — פרטי נדל"ן מורחבים **Additional properties:** any (true schema) - **`remaining_mortgage`** `number` — יתרת משכנתא קיימת (למחזור) - **`source_lead_id`** `string`, format: `uuid` — מזהה הליד המקורי שממנו נוצר התיק - **`source_lead_number`** `string` — מספר הליד המקורי - **`status`** `string`, default: `"new"` — מפתח סטטוס תקף בארגון (סטטוס מערכת או סטטוס מותאם). אם לא נשלח, ה-API מציב new - ראו תיאור הפעולה - **`status_comment`** `string` — הערה לסטטוס הנוכחי - **`tax_declaration`** `string` — הצהרת מש"ח (ראשונה/שנייה/משפרי דיור) - **`title`** `string` — כותרת/שם התיק - **`total_amount`** `number` — סכום כולל של העסקה **Example: default** ```json { "file_number": "2026-0042", "title": "Apartment purchase - Cohen family", "status": "setup", "customer_id": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d", "purposes": [ { "type": "second_hand", "amount": 1200000 } ], "loan_amount": 1200000, "property_type": "apartment", "property_value": 2000000, "property_address": "10 Herzl St., Ramat Gan", "equity": 800000, "borrowers": [ { "first_name": "Yossi", "last_name": "Cohen", "id_number": "000000018", "phone": "052-0000000", "email": "yossi.cohen@example.com", "relationship_type": "main" }, { "first_name": "Ronit", "last_name": "Cohen", "id_number": "000000026", "phone": "054-0000000", "relationship_type": "spouse" } ], "incomes": { "borrowers": [ { "borrowerName": "Yossi Cohen", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "Example Company Ltd.", "position": "Engineer", "start_date": "2019-01-01", "is_current": true } ] } } ] } ] }, "bank_accounts": [ { "bankName": "12", "bankDisplayName": "Example Bank", "branchName": "600", "branchDisplayName": "Central Branch", "accountNumber": "123456", "isJoint": true } ], "obligations": [ { "type": "bank_loan", "monthlyPayment": 1500, "remainingAmount": 30000, "endDate": "2027-12-31" } ] } ``` #### Responses ##### Status: 201 התיק נוצר ###### Content-Type: application/json **All of:** *Schema `MortgageFile` is shown above.* - **`bank_accounts`** `array | null` — חשבונות הבנק שנשמרו, או null **Items:** *Schema `BankAccount` is shown above.* - **`borrowers`** `array` — רשומות השיוך של הלווים שנוצרו - ללא פרטי הלקוח. לפרטים המלאים יש לשלוף את התיק או את /borrowers **Items:** schema: `BorrowerBase` — רשומת השיוך של לווה לתיק, ללא פרטי הלקוח - **`borrower_type`** `string | null`, possible values: `"regular", "paying_guarantor", "supporting_guarantor", "non_mortgaging_borrower"` - **`created_at`** `string`, format: `date-time` - **`custom_relationship`** `string | null` - **`customer_id`** `string | null`, format: `uuid` — מזהה הלקוח המקושר - **`id`** `string`, format: `uuid` — מזהה הלווה - **`mortgage_file_id`** `string`, format: `uuid` - **`order_index`** `integer` - **`organization_id`** `string`, format: `uuid` - **`preferred_contact_methods`** `array | null` **Items:** `string` - **`relationship_type`** `string | null`, possible values: `"main", "spouse", "business_partner", "siblings", "other"` - **`spouse_of_borrower_id`** `string | null`, format: `uuid` - **`updated_at`** `string | null`, format: `date-time` - **`child_errors`** `array` — מופיע רק כאשר שמירת ישות נלווית נכשלה (התיק עצמו נשמר). כל פריט במבנה \`<ישות>: <קוד שגיאה>\`, למשל \`borrower\[1]: invalid_customer_id\`, \`borrower\[0]: 23502\` או \`incomes: 23514\`. **Items:** `string` - **`incomes`** `object | null` — נתוני ההכנסות שנשמרו (מבנה Incomes), או null אם לא נשלחו או שהשמירה נכשלה - **`obligations`** `array | null` — ההתחייבויות שנשמרו, או null **Items:** *Schema `Obligation` is shown above.* schema: `MortgageFileCreateResult` — תגובת יצירת תיק: רשומת התיק יחד עם תוצאות יצירת הלווים, ההכנסות, חשבונות הבנק וההתחייבויות **Example: default** ```json { "id": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "file_number": "2026-0042", "title": "Apartment purchase - Cohen family", "status": "setup", "customer_id": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d", "assigned_to": null, "purposes": [ { "type": "second_hand", "amount": 1200000 } ], "loan_amount": 1200000, "property_type": "apartment", "property_value": 2000000, "property_address": "10 Herzl St., Ramat Gan", "equity": 800000, "created_at": "2026-10-14T08:15:22.481234+00:00", "updated_at": "2026-10-14T08:15:22.481234+00:00", "borrowers": [ { "id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "mortgage_file_id": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f", "customer_id": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d", "order_index": 0, "relationship_type": "main", "borrower_type": "regular", "custom_relationship": null, "preferred_contact_methods": [] }, { "id": "3c4d5e6f-7a8b-4c9d-8e0f-2a3b4c5d6e7f", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "mortgage_file_id": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f", "customer_id": "7c8d9e0f-1a2b-4c3d-9e4f-5a6b7c8d9e0f", "order_index": 1, "relationship_type": "spouse", "borrower_type": "regular", "custom_relationship": null, "preferred_contact_methods": [] } ], "incomes": { "borrowers": [ { "borrowerName": "Yossi Cohen", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "Example Company Ltd.", "position": "Engineer", "start_date": "2019-01-01", "is_current": true } ] } } ] } ] }, "bank_accounts": [ { "bankName": "12", "bankDisplayName": "Example Bank", "branchName": "600", "branchDisplayName": "Central Branch", "accountNumber": "123456", "isJoint": true } ], "obligations": [ { "type": "bank_loan", "monthlyPayment": 1500, "remainingAmount": 30000, "endDate": "2027-12-31" } ] } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תיק משכנתא - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}` - **Operation ID:** `getMortgageFileById` - **Tags:** Mortgage files מחזיר את התיק יחד עם מערך borrowers - הלווים הפעילים בתיק. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 פרטי התיק ###### Content-Type: application/json *Schema `MortgageFileDetails` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "", "borrowers": [ { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ] } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון תיק משכנתא - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}` - **Operation ID:** `updateMortgageFile` - **Tags:** Mortgage files עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. אפשר לעדכן גם incomes, bank_accounts ו-obligations - הערך שנשלח מחליף את הערך השמור (שליחת bank_accounts בלבד משאירה את obligations השמורות, ולהפך). לווים אינם מתעדכנים כאן - השתמשו ב-/mortgage-files/{id}/borrowers. לשינוי סטטוס מומלץ להשתמש ב-PATCH /mortgage-files/{id}/status. בתגובה אין borrowers; incomes, bank_accounts ו-obligations מוחזרים רק אם נשלחו בבקשה (אחרת null). כשל בשמירתם מדווח ב-child_errors. customer_id, lead_id ו-source_lead_id חייבים להיות מזהים של רשומות פעילות בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateMortgageFile` — עדכון חלקי של תיק: רק השדות שנשלחו מתעדכנים. לא ניתן לעדכן לווים דרך נקודת קצה זו. שדות שאינם מופיעים כאן מתעלמים מהם. - **`additional_expenses`** `array` — הוצאות נלוות **Items:** *Schema `AdditionalExpense` is shown above.* - **`additional_info`** `object` — מידע נוסף מורחב **All of:** *Schema `MortgageAdditionalInfo` is shown above.* - **`appraiser_value`** `number` — שווי הנכס לפי שמאי - **`assigned_to`** `string | null`, format: `uuid` — מזהה משתמש בארגון. null או מחרוזת ריקה מבטלים את ההקצאה; מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו - **`bank_accounts`** `array` — חשבונות הבנק. מחליף את הערך השמור; obligations השמורות לא משתנות אם לא נשלחו **Items:** *Schema `BankAccount` is shown above.* - **`contract_date_payment`** `string` — תאריך תשלום לפי חוזה - **`custom_fields_mortgage`** `object` — שדות מותאמים אישית **Additional properties:** any (true schema) - **`customer_id`** `string`, format: `uuid` — מזהה הלקוח הראשי של התיק - **`eligibility`** `number` — סכום זכאות - **`equity`** `number` — הון עצמי - **`file_number`** `string` — מספר התיק - **`financing_entity`** `object` — פרטי הגוף המממן (בנק) **All of:** *Schema `FinancingEntity` is shown above.* - **`incomes`** `object` — נתוני ההכנסות. מחליף את הערך השמור **All of:** *Schema `Incomes` is shown above.* - **`interest_rate`** `number` — שיעור ריבית ממוצע - **`lead_id`** `string`, format: `uuid` — מזהה ליד מקושר - **`lead_source`** `string` — מקור הליד - **`loan_amount`** `number` — סכום המשכנתא המבוקש - **`loan_purpose`** `string` — מטרת ההלוואה - **`loan_term`** `integer` — תקופת ההלוואה בחודשים - **`monthly_payment`** `number` — החזר חודשי צפוי - **`notes`** `string` — הערות כלליות - **`obligations`** `array` — ההתחייבויות. מחליף את הערך השמור; bank_accounts השמורים לא משתנים אם לא נשלחו **Items:** *Schema `Obligation` is shown above.* - **`property_address`** `string` — כתובת הנכס המלאה - **`property_type`** `string` — סוג הנכס (דירה, בית פרטי, מגרש וכו') - **`property_value`** `number` — שווי הנכס - **`purposes`** `array` — מטרות המשכנתא (מחליף את המערך השמור) **Items:** *Schema `MortgagePurpose` is shown above.* - **`real_estate_details`** `object` — פרטי נדל"ן מורחבים **Additional properties:** any (true schema) - **`remaining_mortgage`** `number` — יתרת משכנתא קיימת (למחזור) - **`source_lead_id`** `string`, format: `uuid` — מזהה הליד המקורי שממנו נוצר התיק - **`source_lead_number`** `string` — מספר הליד המקורי - **`status`** `string` — מפתח סטטוס תקף בארגון. לשינוי סטטוס מומלץ להשתמש ב-PATCH /mortgage-files/{id}/status - **`status_comment`** `string` — הערה לסטטוס הנוכחי - **`tax_declaration`** `string` — הצהרת מש"ח (ראשונה/שנייה/משפרי דיור) - **`title`** `string` — כותרת/שם התיק - **`total_amount`** `number` — סכום כולל של העסקה **Example:** ```json { "file_number": "", "title": "", "status": "", "status_comment": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "lead_id": "", "source_lead_id": "", "source_lead_number": "", "incomes": { "borrowers": [ { "borrowerId": "", "borrowerName": "", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ {} ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ] } ] }, "bank_accounts": [ { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ], "obligations": [ { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ] } ``` #### Responses ##### Status: 200 התיק המעודכן ###### Content-Type: application/json **All of:** *Schema `MortgageFile` is shown above.* - **`bank_accounts`** `array | null` — חשבונות הבנק השמורים, או null אם לא נשלחו bank_accounts או obligations בבקשה **Items:** *Schema `BankAccount` is shown above.* - **`child_errors`** `array` — מופיע רק כאשר שמירת ישות נלווית נכשלה (התיק עצמו נשמר). כל פריט במבנה \`<ישות>: <קוד שגיאה>\`, למשל \`borrower\[1]: invalid_customer_id\`, \`borrower\[0]: 23502\` או \`incomes: 23514\`. **Items:** `string` - **`incomes`** `object | null` — נתוני ההכנסות שנשמרו, או null אם incomes לא נשלח בבקשה - **`obligations`** `array | null` — ההתחייבויות השמורות, או null אם לא נשלחו bank_accounts או obligations בבקשה **Items:** *Schema `Obligation` is shown above.* schema: `MortgageFileUpdateResult` — תגובת עדכון תיק: רשומת התיק המעודכנת (ללא borrowers) יחד עם תוצאות שמירת ההכנסות, חשבונות הבנק וההתחייבויות **Example:** ```json { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "", "incomes": null, "bank_accounts": [ { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ], "obligations": [ { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ], "child_errors": [ "" ] } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של תיק משכנתא - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}` - **Operation ID:** `patchMortgageFile` - **Tags:** Mortgage files עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. אפשר לעדכן גם incomes, bank_accounts ו-obligations - הערך שנשלח מחליף את הערך השמור (שליחת bank_accounts בלבד משאירה את obligations השמורות, ולהפך). לווים אינם מתעדכנים כאן - השתמשו ב-/mortgage-files/{id}/borrowers. לשינוי סטטוס מומלץ להשתמש ב-PATCH /mortgage-files/{id}/status. בתגובה אין borrowers; incomes, bank_accounts ו-obligations מוחזרים רק אם נשלחו בבקשה (אחרת null). כשל בשמירתם מדווח ב-child_errors. customer_id, lead_id ו-source_lead_id חייבים להיות מזהים של רשומות פעילות בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateMortgageFile` is shown above.* **Example:** ```json { "file_number": "", "title": "", "status": "", "status_comment": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "lead_id": "", "source_lead_id": "", "source_lead_number": "", "incomes": { "borrowers": [ { "borrowerId": "", "borrowerName": "", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ {} ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ] } ] }, "bank_accounts": [ { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ], "obligations": [ { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ] } ``` #### Responses ##### Status: 200 התיק המעודכן ###### Content-Type: application/json *Schema `MortgageFileUpdateResult` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "", "incomes": null, "bank_accounts": [ { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ], "obligations": [ { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ], "child_errors": [ "" ] } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### מחיקת תיק משכנתא - **Method:** `DELETE` - **Path:** `/api-service/mortgage-files/{id}` - **Operation ID:** `deleteMortgageFile` - **Tags:** Mortgage files מחיקה רכה (soft delete): התיק מסומן כמחוק ואינו מוחזר עוד בשליפות ה-API. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 התיק נמחק ###### Content-Type: application/json *Schema `DeleteResult` is shown above.* **Example: default** ```json { "success": true, "message": "Mortgage file deleted successfully" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון סטטוס תיק משכנתא - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/status` - **Operation ID:** `updateMortgageFileStatus` - **Tags:** Mortgage files משנה את סטטוס התיק ומעדכן את status_changed_at. הסטטוס חייב להיות סטטוס תקף בארגון - סטטוס מערכת או סטטוס מותאם (ראו GET /mortgage-files/statuses) - אחרת 400 (code 23514). status חסר מחזיר 400. notes (אופציונלי) נשמר כ-status_comment של התיק. השינוי נרשם בציר הזמן של התיק (אירוע מסוג status_updated). התגובה היא רשומת התיק, ללא borrowers. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body הסטטוס החדש **Required:** `true` ##### Content-Type: application/json schema: `UpdateMortgageStatus` - **`status` (required)** `string` — מפתח הסטטוס החדש: סטטוס מערכת או סטטוס מותאם של הארגון (ראו GET /mortgage-files/statuses) - **`notes`** `string` — הערה לשינוי הסטטוס (אופציונלי). נשמרת כ-status_comment של התיק **Example: default** ```json { "status": "signing", "notes": "Approval in principle received" } ``` #### Responses ##### Status: 200 התיק לאחר עדכון הסטטוס ###### Content-Type: application/json *Schema `MortgageFile` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סטטוסי תיקי משכנתא - **Method:** `GET` - **Path:** `/api-service/mortgage-files/statuses` - **Operation ID:** `getMortgageFileStatuses` - **Tags:** Mortgage files מחזיר את הגדרת סטטוסי התיקים של הארגון. אם לארגון יש הגדרת סטטוסים - source=custom, והפריטים הם הגדרות הארגון ללא סטטוסים מוסתרים (ייתכנו בהם שדות נוספים, כמו אבני הדרך של כל סטטוס). אחרת - source=default ורשימת ברירת מחדל קבועה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סטטוסי התיקים ###### Content-Type: application/json - **`count`** `integer` — מספר הפריטים במערך data - **`data`** `array` — רשימת הסטטוסים **Items:** schema: `MortgageStatus` — סטטוס תיק משכנתא - כולל סטטוסים מותאמים אישית של הארגון - **`bgColor`** `string` — צבע רקע (HEX) - **`is_hidden`** `boolean` — האם הסטטוס מוסתר - **`is_system`** `boolean` — האם זה סטטוס מערכת (לא ניתן למחוק) - **`key`** `string` — מזהה הסטטוס - **`label`** `string` — שם תצוגה בעברית - **`order`** `integer` — סדר התצוגה - **`textColor`** `string` — צבע טקסט (HEX) - **`source`** `string`, possible values: `"default", "custom"` — מקור הרשימה: הגדרות הארגון (custom) או ברירת המחדל (default) **Example:** ```json { "data": [ { "key": "", "label": "", "bgColor": "", "textColor": "", "is_system": true, "is_hidden": true, "order": 1 } ], "count": 1, "source": "default" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת לווי התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/borrowers` - **Operation ID:** `getMortgageFileBorrowers` - **Tags:** Borrowers מחזיר את הלווים הפעילים בתיק לפי סדרם (order_index), ללא דפדוף. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 רשימת הלווים ###### Content-Type: application/json - **`count`** `integer` — מספר הפריטים במערך data - **`data`** `array` **Items:** *Schema `Borrower` is shown above.* **Example:** ```json { "data": [ { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### הוספת לווה לתיק - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/borrowers` - **Operation ID:** `addBorrowerToMortgageFile` - **Tags:** Borrowers מוסיף לווה לתיק ומקשר אותו לרשומת לקוח: - אם נשלח **id_number** - מאותר לקוח פעיל בארגון עם אותו מספר זיהוי, ושדות הלקוח שנשלחו **מעדכנים את הלקוח הקיים**. אם אין כזה - נוצר לקוח חדש (id_type ברירת מחדל israeli_id; ליצירה נדרשים first_name ו-last_name, אחרת 500 עם code 23502). - אם לא נשלח id_number - הלווה מקושר ל-customer_id שנשלח (אם נשלח), **ושדות הלקוח שבבקשה אינם נשמרים**. customer_id חייב להיות של לקוח פעיל בארגון - אחרת 400 (Invalid customer_id). ברירות מחדל: order_index = מספר הלווים הקיימים בתיק; relationship_type = main ללווה הראשון ו-spouse לבאים; borrower_type = regular. לווה עם order_index=0 חייב להיות main (אחרת 400, code 23514). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי הלווה **Required:** `true` ##### Content-Type: application/json *Schema `CreateBorrower` is shown above.* **Example: default** ```json { "first_name": "Ronit", "last_name": "Cohen", "id_number": "000000026", "phone": "054-0000000", "email": "ronit.cohen@example.com", "relationship_type": "spouse" } ``` #### Responses ##### Status: 201 הלווה נוסף (כולל פרטי הלקוח המקושר) ###### Content-Type: application/json *Schema `Borrower` is shown above.* **Example:** ```json { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון לווה - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/borrowers/{borrowerId}` - **Operation ID:** `updateMortgageFileBorrower` - **Tags:** Borrowers עדכון חלקי (PUT ו-PATCH זהים). שדות הלקוח (שם, זיהוי, פרטי קשר וכו') מעדכנים את רשומת הלקוח המקושר - והשינוי חל על כל התיקים שבהם הלקוח הוא לווה; ללווה שאינו מקושר ללקוח הם אינם נשמרים. שדות השיוך (relationship_type, custom_relationship, borrower_type, preferred_contact_methods, order_index) חלים על הלווה בתיק זה בלבד. בקשה בלי שדות מוכרים מחזירה את הלווה ללא שינוי. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `borrowerId` required - **In:** `path` מזהה הלווה (id מתוך רשימת הלווים של התיק) `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateBorrower` — עדכון חלקי של לווה. שדות הלקוח מעדכנים את רשומת הלקוח המקושר (וחלים על כל התיקים שלו); שדות השיוך (relationship_type, custom_relationship, borrower_type, preferred_contact_methods, order_index) חלים על הלווה בתיק זה בלבד. - **`birth_date`** `string`, format: `date` — תאריך לידה - **`borrower_type`** `string`, possible values: `"regular", "paying_guarantor", "supporting_guarantor", "non_mortgaging_borrower"` — סוג הלווה - **`children_birth_dates`** `array` — תאריכי לידה של ילדים **Items:** `string`, format: `date` - **`children_under_18`** `integer` — מספר ילדים מתחת לגיל 18 - **`city`** `string` — עיר מגורים - **`custom_marital_status`** `string` — מצב משפחתי מותאם אישית (כאשר marital_status=other) - **`custom_relationship`** `string` — סוג קשר מותאם אישית (כאשר relationship_type=other) - **`email`** `string`, format: `email` — כתובת אימייל - **`entity_name`** `string` — שם התאגיד או העמותה (כאשר id_type הוא company או association) - **`first_name`** `string` — שם פרטי - **`foreign_citizenship`** `string` — שם המדינה של האזרחות הזרה - **`gender`** `string`, possible values: `"male", "female", "other"` — מגדר - **`has_children`** `boolean` — האם יש ילדים - **`has_foreign_citizenship`** `boolean` — האם יש אזרחות זרה - **`id_country`** `string` — המדינה שהנפיקה את מסמך הזיהוי (רלוונטי לדרכון) - **`id_expiry_date`** `string`, format: `date` — תאריך תפוגת מסמך הזיהוי - **`id_number`** `string` — מספר מסמך הזיהוי של הלקוח המקושר - **`id_type`** `string`, possible values: `"israeli_id", "passport", "association", "company"` — סוג מסמך הזיהוי - **`is_politically_exposed`** `boolean` — האם אישיות פוליטית מוכרת (PEP) - **`issue_date`** `string`, format: `date` — תאריך הנפקת מסמך הזיהוי - **`last_name`** `string` — שם משפחה - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`order_index`** `integer` — סדר הלווה בתיק (0 = הלווה הראשי) - **`phone`** `string` — מספר טלפון - **`preferred_contact_methods`** `array` — דרכי יצירת קשר מועדפות **Items:** `string`, possible values: `"email", "sms", "whatsapp", "voice", "no_sms"` - **`relationship_type`** `string`, possible values: `"main", "spouse", "business_partner", "siblings", "other"` — סוג הקשר של הלווה לתיק. לווה עם order_index=0 חייב להיות main - **`street`** `string` — רחוב מגורים **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "preferred_contact_methods": [ "email" ], "order_index": 1 } ``` #### Responses ##### Status: 200 הלווה המעודכן ###### Content-Type: application/json *Schema `Borrower` is shown above.* **Example:** ```json { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של לווה - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/borrowers/{borrowerId}` - **Operation ID:** `patchMortgageFileBorrower` - **Tags:** Borrowers עדכון חלקי (PUT ו-PATCH זהים). שדות הלקוח (שם, זיהוי, פרטי קשר וכו') מעדכנים את רשומת הלקוח המקושר - והשינוי חל על כל התיקים שבהם הלקוח הוא לווה; ללווה שאינו מקושר ללקוח הם אינם נשמרים. שדות השיוך (relationship_type, custom_relationship, borrower_type, preferred_contact_methods, order_index) חלים על הלווה בתיק זה בלבד. בקשה בלי שדות מוכרים מחזירה את הלווה ללא שינוי. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `borrowerId` required - **In:** `path` מזהה הלווה (id מתוך רשימת הלווים של התיק) `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateBorrower` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "preferred_contact_methods": [ "email" ], "order_index": 1 } ``` #### Responses ##### Status: 200 הלווה המעודכן ###### Content-Type: application/json *Schema `Borrower` is shown above.* **Example:** ```json { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### הסרת לווה מהתיק - **Method:** `DELETE` - **Path:** `/api-service/mortgage-files/{id}/borrowers/{borrowerId}` - **Operation ID:** `removeBorrowerFromMortgageFile` - **Tags:** Borrowers מסיר את הלווה מהתיק (מחיקה רכה של השיוך). רשומת הלקוח עצמה אינה נמחקת. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `borrowerId` required - **In:** `path` מזהה הלווה (id מתוך רשימת הלווים של התיק) `string`, format: `uuid` #### Responses ##### Status: 200 הלווה הוסר ###### Content-Type: application/json *Schema `DeleteResult` is shown above.* **Example: default** ```json { "success": true, "message": "Borrower deleted successfully" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת רשימת לקוחות - **Method:** `GET` - **Path:** `/api-service/customers` - **Operation ID:** `getCustomers` - **Tags:** Customers מחזיר את לקוחות הארגון (ללא לקוחות שנמחקו), מהחדש לישן, עם דפדוף. ברשימה אין mortgage_files - הם מוחזרים רק בשליפת לקוח בודד. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בשם פרטי, שם משפחה, טלפון, אימייל ומספר זיהוי. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` #### Responses ##### Status: 200 רשימת לקוחות ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Customer` — לקוח בארגון. התגובה עשויה לכלול עמודות נוספות שאינן מתועדות כאן. - **`first_name` (required)** `string` — שם פרטי - **`last_name` (required)** `string` — שם משפחה - **`birth_date`** `string`, format: `date` — תאריך לידה - **`children_birth_dates`** `array` — תאריכי לידה של ילדים **Items:** `string`, format: `date` - **`children_under_18`** `integer` — מספר ילדים מתחת לגיל 18 - **`city`** `string` — עיר - **`created_at`** `string`, format: `date-time` — תאריך יצירה - **`custom_marital_status`** `string` — מצב משפחתי מותאם אישית (כאשר marital_status=other) - **`email`** `string`, format: `email` — כתובת אימייל - **`entity_name`** `string` — שם התאגיד או העמותה (כאשר id_type הוא company או association) - **`foreign_citizenship`** `string` — שם המדינה של האזרחות הזרה - **`gender`** `string`, possible values: `"male", "female", "other"` — מגדר - **`has_children`** `boolean` — האם יש ילדים - **`has_foreign_citizenship`** `boolean` — האם יש אזרחות זרה - **`id`** `string`, format: `uuid` — מזהה הלקוח - **`id_country`** `string` — המדינה שהנפיקה את מסמך הזיהוי (רלוונטי לדרכון) - **`id_expiry_date`** `string`, format: `date` — תאריך תפוגת מסמך הזיהוי - **`id_number`** `string` — מספר מסמך הזיהוי - **`id_type`** `string`, possible values: `"israeli_id", "passport", "association", "company"` — סוג מסמך הזיהוי - **`is_politically_exposed`** `boolean` — האם אישיות פוליטית מוכרת (PEP) - **`issue_date`** `string`, format: `date` — תאריך הנפקת מסמך הזיהוי - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`mortgage_files`** `array` — מוחזר ב-GET /customers/{id} בלבד: תיקי המשכנתא הפעילים שבהם הלקוח הוא הלקוח הראשי (customer_id), ללא לווים **Items:** *Schema `MortgageFile` is shown above.* - **`organization_id`** `string`, format: `uuid` — מזהה הארגון - **`phone`** `string` — מספר טלפון - **`street`** `string` — רחוב - **`updated_at`** `string`, format: `date-time` — תאריך עדכון אחרון **Example:** ```json { "data": [ { "id": "", "organization_id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "created_at": "", "updated_at": "", "mortgage_files": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ] } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת לקוח - **Method:** `POST` - **Path:** `/api-service/customers` - **Operation ID:** `createCustomer` - **Tags:** Customers יוצר לקוח חדש בארגון. - חובה: first_name ו-last_name. שדה חסר מחזיר 400 עם validation. - id_type ברירת מחדל israeli_id. - אם id_number כבר שייך ללקוח פעיל בארגון - 409, ומזהה הלקוח הקיים מוחזר ב-existing_customer_id. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Request Body פרטי הלקוח החדש **Required:** `true` ##### Content-Type: application/json schema: `CreateCustomer` — נתונים ליצירת לקוח. שדות שאינם מופיעים כאן מתעלמים מהם. - **`first_name` (required)** `string` — שם פרטי - **`last_name` (required)** `string` — שם משפחה - **`birth_date`** `string`, format: `date` — תאריך לידה - **`children_birth_dates`** `array` — תאריכי לידה של ילדים **Items:** `string`, format: `date` - **`children_under_18`** `integer` — מספר ילדים מתחת לגיל 18 - **`city`** `string` — עיר - **`custom_marital_status`** `string` — מצב משפחתי מותאם אישית (כאשר marital_status=other) - **`email`** `string`, format: `email` — כתובת אימייל - **`entity_name`** `string` — שם התאגיד או העמותה (כאשר id_type הוא company או association) - **`foreign_citizenship`** `string` — שם המדינה של האזרחות הזרה - **`gender`** `string`, possible values: `"male", "female", "other"` — מגדר - **`has_children`** `boolean` — האם יש ילדים - **`has_foreign_citizenship`** `boolean` — האם יש אזרחות זרה - **`id_country`** `string` — המדינה שהנפיקה את מסמך הזיהוי (רלוונטי לדרכון) - **`id_expiry_date`** `string`, format: `date` — תאריך תפוגת מסמך הזיהוי - **`id_number`** `string` — מספר מסמך הזיהוי. ייחודי בארגון - אם כבר קיים לקוח עם אותו מספר, מוחזר 409 - **`id_type`** `string`, possible values: `"israeli_id", "passport", "association", "company"`, default: `"israeli_id"` — סוג מסמך הזיהוי - **`is_politically_exposed`** `boolean` — האם אישיות פוליטית מוכרת (PEP) - **`issue_date`** `string`, format: `date` — תאריך הנפקת מסמך הזיהוי - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`phone`** `string` — מספר טלפון - **`street`** `string` — רחוב **Example: default** ```json { "first_name": "Yossi", "last_name": "Cohen", "id_type": "israeli_id", "id_number": "000000018", "phone": "052-0000000", "email": "yossi.cohen@example.com", "birth_date": "1988-04-12", "gender": "male", "marital_status": "married", "street": "10 Herzl St.", "city": "Ramat Gan" } ``` #### Responses ##### Status: 201 הלקוח נוצר ###### Content-Type: application/json *Schema `Customer` is shown above.* **Example: default** ```json { "id": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "first_name": "Yossi", "last_name": "Cohen", "id_type": "israeli_id", "id_number": "000000018", "phone": "052-0000000", "email": "yossi.cohen@example.com", "birth_date": "1988-04-12", "gender": "male", "marital_status": "married", "street": "10 Herzl St.", "city": "Ramat Gan", "created_at": "2026-10-14T08:15:22.481234+00:00", "updated_at": "2026-10-14T08:15:22.481234+00:00" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 409 כבר קיים בארגון לקוח עם אותו id_number. מזהה הלקוח הקיים מוחזר ב-existing_customer_id ###### Content-Type: application/json schema: `ErrorResponse` — מבנה אחיד לכל תגובות השגיאה. בנוסף לשדות הקבועים error ו-status, חלק מהשגיאות מוסיפות שדות הקשר - למשל validation, existing_customer_id, related_files_count, related_mortgages_count, existing_link_id, existing_id, provided_type או available_lists. - **`error` (required)** `string` — תיאור קצר של השגיאה (באנגלית) - **`status` (required)** `integer` — קוד סטטוס ה-HTTP (זהה לקוד התגובה) - **`code`** `string` — קוד השגיאה של PostgREST/Postgres, כשבטוח לחשוף: ב-400 (22P02, 23503, 23514), ב-409 (23505) וב-500 - **`details`** `string` — פירוט נוסף, כשיש. לעולם אינו כולל הודעות גולמיות של מסד הנתונים - **`reason`** `string`, possible values: `"missing_api_key", "malformed_api_key", "invalid_api_key", "auth_service_error"` — ב-401 בלבד: סיבת דחיית המפתח - **`retry_after`** `string`, format: `date-time` — ב-429 בלבד: מועד איפוס חלון מגבלת הקצב - **`validation`** `object` — ב-400 על שדות חובה חסרים: מפה משם השדה להודעה "Required field" **Additional properties:** `string` **Additional properties:** any (true schema) **Example: default** ```json { "error": "Customer with this ID number already exists", "details": "A customer with this ID number is already registered in your organization", "status": 409, "existing_customer_id": "5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d" } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת לקוח - **Method:** `GET` - **Path:** `/api-service/customers/{id}` - **Operation ID:** `getCustomerById` - **Tags:** Customers מחזיר את הלקוח יחד עם mortgage_files - תיקי המשכנתא הפעילים שבהם הוא הלקוח הראשי (customer_id), ללא לווים. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הלקוח `string`, format: `uuid` #### Responses ##### Status: 200 פרטי הלקוח ###### Content-Type: application/json *Schema `Customer` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "created_at": "", "updated_at": "", "mortgage_files": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ] } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון לקוח - **Method:** `PUT` - **Path:** `/api-service/customers/{id}` - **Operation ID:** `updateCustomer` - **Tags:** Customers עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. בעדכון לא מתבצעת בדיקת כפילות של id_number ברמת ה-API; מספר שכבר שייך ללקוח אחר נדחה ע"י מסד הנתונים (409, code 23505). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הלקוח `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateCustomer` — עדכון חלקי של לקוח: רק השדות שנשלחו מתעדכנים. שדות שאינם מופיעים כאן מתעלמים מהם. - **`birth_date`** `string`, format: `date` — תאריך לידה - **`children_birth_dates`** `array` — תאריכי לידה של ילדים **Items:** `string`, format: `date` - **`children_under_18`** `integer` — מספר ילדים מתחת לגיל 18 - **`city`** `string` — עיר - **`custom_marital_status`** `string` — מצב משפחתי מותאם אישית (כאשר marital_status=other) - **`email`** `string`, format: `email` — כתובת אימייל - **`entity_name`** `string` — שם התאגיד או העמותה (כאשר id_type הוא company או association) - **`first_name`** `string` — שם פרטי - **`foreign_citizenship`** `string` — שם המדינה של האזרחות הזרה - **`gender`** `string`, possible values: `"male", "female", "other"` — מגדר - **`has_children`** `boolean` — האם יש ילדים - **`has_foreign_citizenship`** `boolean` — האם יש אזרחות זרה - **`id_country`** `string` — המדינה שהנפיקה את מסמך הזיהוי (רלוונטי לדרכון) - **`id_expiry_date`** `string`, format: `date` — תאריך תפוגת מסמך הזיהוי - **`id_number`** `string` — מספר מסמך הזיהוי. ייחודי בארגון - מספר שכבר שייך ללקוח אחר נדחה ע"י מסד הנתונים (409, code 23505) - **`id_type`** `string`, possible values: `"israeli_id", "passport", "association", "company"` — סוג מסמך הזיהוי - **`is_politically_exposed`** `boolean` — האם אישיות פוליטית מוכרת (PEP) - **`issue_date`** `string`, format: `date` — תאריך הנפקת מסמך הזיהוי - **`last_name`** `string` — שם משפחה - **`marital_status`** `string`, possible values: `"single", "married", "divorced", "widowed", "separated", "domestic_partnership", "other"` — מצב משפחתי - **`phone`** `string` — מספר טלפון - **`street`** `string` — רחוב **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true } ``` #### Responses ##### Status: 200 הלקוח המעודכן ###### Content-Type: application/json *Schema `Customer` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "created_at": "", "updated_at": "", "mortgage_files": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ] } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של לקוח - **Method:** `PATCH` - **Path:** `/api-service/customers/{id}` - **Operation ID:** `partialUpdateCustomer` - **Tags:** Customers עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. בעדכון לא מתבצעת בדיקת כפילות של id_number ברמת ה-API; מספר שכבר שייך ללקוח אחר נדחה ע"י מסד הנתונים (409, code 23505). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הלקוח `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateCustomer` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true } ``` #### Responses ##### Status: 200 הלקוח המעודכן ###### Content-Type: application/json *Schema `Customer` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "created_at": "", "updated_at": "", "mortgage_files": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ] } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### מחיקת לקוח - **Method:** `DELETE` - **Path:** `/api-service/customers/{id}` - **Operation ID:** `deleteCustomer` - **Tags:** Customers מחיקה רכה (soft delete). לא ניתן למחוק לקוח שהוא הלקוח הראשי של תיק משכנתא פעיל - 409 עם related_files_count. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הלקוח `string`, format: `uuid` #### Responses ##### Status: 200 הלקוח נמחק ###### Content-Type: application/json *Schema `DeleteResult` is shown above.* **Example: default** ```json { "success": true, "message": "Customer deleted successfully" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 ללקוח יש תיקי משכנתא פעילים. מספרם מוחזר ב-related_files_count ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Cannot delete customer", "details": "This customer has active mortgage files. You must delete the mortgage files first.", "status": 409, "related_files_count": 2 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תיקי לקוח - **Method:** `GET` - **Path:** `/api-service/customers/{id}/mortgage-files` - **Operation ID:** `getCustomerMortgageFiles` - **Tags:** Customers, Mortgage files מחזיר את התיקים הפעילים שבהם הלקוח הוא הלקוח הראשי (customer_id), מהחדש לישן. לסינון ודפדוף השתמשו ב-GET /mortgage-files?customer_id={id}. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה הלקוח `string`, format: `uuid` #### Responses ##### Status: 200 תיקי הלקוח ###### Content-Type: application/json - **`count`** `integer` — מספר התיקים - **`data`** `array` **Items:** *Schema `MortgageFile` is shown above.* **Example:** ```json { "data": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי הרשימות - **Method:** `GET` - **Path:** `/api-service/lists` - **Operation ID:** `getAvailableLists` - **Tags:** Lists מחזיר את כל הרשימות הזמינות, עם הנתיב ומספר הפריטים של כל אחת. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי הרשימות ###### Content-Type: application/json - **`count`** `integer` — מספר סוגי הרשימות - **`data`** `array` **Items:** - **`count`** `integer` — מספר הפריטים ברשימה - **`endpoint`** `string` — נתיב ה-API לשליפת הרשימה - **`key`** `string` — מזהה הרשימה - **`description`** `string` **Example: default** ```json { "data": [ { "key": "employment-types", "endpoint": "/api-service/lists/employment-types", "count": 9 }, { "key": "income-types", "endpoint": "/api-service/lists/income-types", "count": 5 }, { "key": "obligation-types", "endpoint": "/api-service/lists/obligation-types", "count": 6 }, { "key": "mortgage-types", "endpoint": "/api-service/lists/mortgage-types", "count": 20 }, { "key": "registration-types", "endpoint": "/api-service/lists/registration-types", "count": 9 }, { "key": "mishach-types", "endpoint": "/api-service/lists/mishach-types", "count": 3 }, { "key": "upload-document-statuses", "endpoint": "/api-service/lists/upload-document-statuses", "count": 6 }, { "key": "signature-document-statuses", "endpoint": "/api-service/lists/signature-document-statuses", "count": 4 }, { "key": "additional-expense-types", "endpoint": "/api-service/lists/additional-expense-types", "count": 8 }, { "key": "calendar-event-types", "endpoint": "/api-service/lists/calendar-event-types", "count": 10 } ], "count": 10, "description": "רשימת כל סוגי הרשימות הזמינות" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי תעסוקה - **Method:** `GET` - **Path:** `/api-service/lists/employment-types` - **Operation ID:** `getEmploymentTypes` - **Tags:** Lists סוגי התעסוקה (שכיר, עצמאי, פנסיה וכו'). אלה המפתחות לשדה type של תעסוקה במבנה incomes. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי תעסוקה ###### Content-Type: application/json schema: `ListResponse` — תגובת רשימה בסיסית - **`count`** `integer` — מספר הפריטים - **`data`** `array` — פריטי הרשימה **Items:** schema: `ListItem` — פריט ברשימה בסיסית - **`key` (required)** `string` — מזהה הפריט - **`label` (required)** `string` — שם תצוגה בעברית - **`list_type`** `string` — סוג הרשימה **Example: default** ```json { "data": [ { "key": "salaried", "label": "שכיר" }, { "key": "self_employed", "label": "עצמאי" }, { "key": "scholarship", "label": "מלגת לימודים" }, { "key": "child_benefit", "label": "קצבת ילדים" }, { "key": "kollel", "label": "אברך כולל" }, { "key": "pension", "label": "פנסיה" }, { "key": "allowance", "label": "קצבה" }, { "key": "other", "label": "אחר" }, { "key": "unemployed", "label": "לא עובד" } ], "count": 9, "list_type": "employment-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי הכנסות נוספות - **Method:** `GET` - **Path:** `/api-service/lists/income-types` - **Operation ID:** `getIncomeTypes` - **Tags:** Lists סוגי הכנסות נוספות (השכרה, דיבידנד, מזונות וכו'). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי הכנסות נוספות ###### Content-Type: application/json *Schema `ListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "rental", "label": "הכנסה מדירה/נכס" }, { "key": "dividend", "label": "דיבידנד" }, { "key": "alimony", "label": "מזונות" }, { "key": "child_disability", "label": "קצבת ילד נכה" }, { "key": "other", "label": "אחר" } ], "count": 5, "list_type": "income-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי התחייבויות - **Method:** `GET` - **Path:** `/api-service/lists/obligation-types` - **Operation ID:** `getObligationTypes` - **Tags:** Lists סוגי ההתחייבויות (הלוואות, משכנתא, מזונות וכו'). אלה המפתחות לשדה type ב-obligations. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי התחייבויות ###### Content-Type: application/json *Schema `ListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "bank_loan", "label": "הלוואה בנקאית" }, { "key": "non_bank_loan", "label": "הלוואה חוץ בנקאית" }, { "key": "mortgage", "label": "משכנתא" }, { "key": "alimony", "label": "מזונות" }, { "key": "rent", "label": "שכירות" }, { "key": "other", "label": "אחר" } ], "count": 6, "list_type": "obligation-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי משכנתא - **Method:** `GET` - **Path:** `/api-service/lists/mortgage-types` - **Operation ID:** `getMortgageTypes` - **Tags:** Lists סוגי המשכנתא (רכישה מקבלן, יד שנייה, מיחזור וכו'). אלה המפתחות לשדה purposes\[].type בתיק. הרשימה כוללת גם סוגים משולבים ישנים שנשמרו לתאימות לאחור. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי משכנתא ###### Content-Type: application/json *Schema `ListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "new_contractor", "label": "רכישה מקבלן" }, { "key": "subsidized_price", "label": "רכישה במחיר למשתכן" }, { "key": "second_hand", "label": "רכישה יד שניה" }, { "key": "amidar", "label": "רכישה מעמידר" }, { "key": "divorce", "label": "רכישה אגב גירושין" }, { "key": "land_purchase_rami", "label": "רכישת מגרש מרמ\"י" }, { "key": "refinance", "label": "מיחזור משכנתא" }, { "key": "expansion", "label": "הרחבה / בניה עצמית" }, { "key": "first_expansion", "label": "הרחבה (משכנתא ראשונה)" }, { "key": "renovations", "label": "שיפוצים" }, { "key": "any_purpose", "label": "כל מטרה" }, { "key": "dowry", "label": "נדוניה" }, { "key": "bridge_loan", "label": "הלוואת גישור" }, { "key": "business_loan", "label": "הלוואה עסקית" }, { "key": "overdraft_loan", "label": "הלוואת עו\"ש" }, { "key": "self_construction", "label": "בניה עצמית" }, { "key": "refinance_expansion", "label": "מיחזור + הרחבה" }, { "key": "refinance_renovations", "label": "מיחזור + שיפוצים" }, { "key": "refinance_any_purpose", "label": "מיחזור + כל מטרה" }, { "key": "refinance_dowry", "label": "מיחזור + נדוניה" } ], "count": 20, "list_type": "mortgage-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי רישום נכס - **Method:** `GET` - **Path:** `/api-service/lists/registration-types` - **Operation ID:** `getRegistrationTypes` - **Tags:** Lists סוגי רישום הנכס (טאבו, רמ"י, חברה משכנת וכו'). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי רישום ###### Content-Type: application/json *Schema `ListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "tabu", "label": "טאבו" }, { "key": "tabu_mortgage_company", "label": "טאבו + חברה משכנת" }, { "key": "tabu_no_ownership", "label": "טאבו ללא בעלות" }, { "key": "tabu_musha", "label": "טאבו במושע" }, { "key": "rami", "label": "רמי" }, { "key": "rami_mortgage_company", "label": "רמי + חברה משכנת" }, { "key": "zionist_organization", "label": "ההסתדרות הציונית" }, { "key": "jordanian_tabu", "label": "טאבו ירדני" }, { "key": "other", "label": "אחר" } ], "count": 9, "list_type": "registration-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי הצהרות מש"ח - **Method:** `GET` - **Path:** `/api-service/lists/mishach-types` - **Operation ID:** `getMishachTypes` - **Tags:** Lists סוגי הצהרות מש"ח (דירה יחידה, דירה חליפית, דירה להשקעה). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי הצהרות מש"ח ###### Content-Type: application/json *Schema `ListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "single_apartment", "label": "דירה יחידה" }, { "key": "replacement_apartment", "label": "דירה חליפית" }, { "key": "investment_apartment", "label": "דירה להשקעה" } ], "count": 3, "list_type": "mishach-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סטטוסי מסמכים להעלאה - **Method:** `GET` - **Path:** `/api-service/lists/upload-document-statuses` - **Operation ID:** `getUploadDocumentStatuses` - **Tags:** Lists הסטטוסים של מסמך שנדרש להעלאה, עם צבעי תצוגה (HEX). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סטטוסי מסמכים להעלאה ###### Content-Type: application/json schema: `StatusListResponse` — תגובת רשימת סטטוסים - **`count`** `integer` — מספר הפריטים - **`data`** `array` — פריטי הרשימה **Items:** schema: `StatusListItem` — פריט ברשימת סטטוסים עם צבעים - **`bgColor` (required)** `string` — צבע רקע (HEX) - **`key` (required)** `string` — מזהה הסטטוס - **`label` (required)** `string` — שם תצוגה בעברית - **`textColor` (required)** `string` — צבע טקסט (HEX) - **`list_type`** `string` — סוג הרשימה **Example: default** ```json { "data": [ { "key": "pending", "label": "ממתין להעלאה", "bgColor": "#fef9c3", "textColor": "#854d0e" }, { "key": "uploading", "label": "בהעלאה", "bgColor": "#dbeafe", "textColor": "#1d4ed8" }, { "key": "under_review", "label": "בבדיקה", "bgColor": "#f3e8ff", "textColor": "#7e22ce" }, { "key": "completed", "label": "הושלם", "bgColor": "#dcfce7", "textColor": "#166534" }, { "key": "rejected", "label": "נדחה", "bgColor": "#fee2e2", "textColor": "#dc2626" }, { "key": "expired", "label": "פג תוקף", "bgColor": "#f3f4f6", "textColor": "#4b5563" } ], "count": 6, "list_type": "upload-document-statuses" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סטטוסי מסמכים לחתימה - **Method:** `GET` - **Path:** `/api-service/lists/signature-document-statuses` - **Operation ID:** `getSignatureDocumentStatuses` - **Tags:** Lists הסטטוסים של מסמך שנשלח לחתימה, עם צבעי תצוגה (HEX). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סטטוסי מסמכים לחתימה ###### Content-Type: application/json *Schema `StatusListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "pending", "label": "ממתין לחתימה", "bgColor": "#fef9c3", "textColor": "#854d0e" }, { "key": "under_review", "label": "בבדיקה", "bgColor": "#ffedd5", "textColor": "#c2410c" }, { "key": "completed", "label": "נחתם", "bgColor": "#dcfce7", "textColor": "#166534" }, { "key": "rejected", "label": "נדחה", "bgColor": "#fee2e2", "textColor": "#dc2626" } ], "count": 4, "list_type": "signature-document-statuses" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי הוצאות נלוות - **Method:** `GET` - **Path:** `/api-service/lists/additional-expense-types` - **Operation ID:** `getAdditionalExpenseTypes` - **Tags:** Lists סוגי ההוצאות הנלוות לעסקה (מס רכישה, עו"ד, תיווך וכו'). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי הוצאות נלוות ###### Content-Type: application/json *Schema `ListResponse` is shown above.* **Example: default** ```json { "data": [ { "key": "purchase_tax", "label": "מס רכישה" }, { "key": "lawyer_fee", "label": "שכר טרחה עו\"ד" }, { "key": "brokerage", "label": "תיווך" }, { "key": "mortgage_consulting", "label": "ייעוץ משכנתאות" }, { "key": "renovation_furniture", "label": "שיפוץ וריהוט" }, { "key": "index_addition", "label": "תוספת עבור מדד" }, { "key": "appraisal", "label": "שמאות" }, { "key": "other", "label": "אחר" } ], "count": 8, "list_type": "additional-expense-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סוגי אירועי יומן - **Method:** `GET` - **Path:** `/api-service/lists/calendar-event-types` - **Operation ID:** `getCalendarEventTypes` - **Tags:** Lists סוגי אירועי היומן (משימה, תזכורת, פגישה וכו'), עם צבע, אייקון וסדר מיון. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Responses ##### Status: 200 סוגי אירועי יומן ###### Content-Type: application/json schema: `CalendarEventTypeListResponse` — תגובת רשימת סוגי אירועי יומן - **`count`** `integer` — מספר הסוגים - **`data`** `array` — סוגי האירועים **Items:** schema: `CalendarEventTypeItem` — סוג אירוע יומן - **`code` (required)** `string` — מזהה סוג האירוע - **`color` (required)** `string` — צבע האירוע (HEX) - **`name` (required)** `string` — שם בעברית - **`allowSync`** `boolean` — האם לאפשר סנכרון - **`icon`** `string` — שם האייקון - **`nameEn`** `string` — שם באנגלית - **`showInCalendar`** `boolean` — האם להציג ביומן - **`sortOrder`** `integer` — סדר מיון - **`list_type`** `string` — סוג הרשימה **Example: default** ```json { "data": [ { "code": "task", "name": "משימה", "nameEn": "Task", "color": "#3b82f6", "icon": "check-square", "sortOrder": 1, "showInCalendar": true, "allowSync": true }, { "code": "reminder", "name": "תזכורת", "nameEn": "Reminder", "color": "#f59e0b", "icon": "bell", "sortOrder": 2, "showInCalendar": true, "allowSync": true }, { "code": "payment", "name": "תשלום", "nameEn": "Payment", "color": "#10b981", "icon": "credit-card", "sortOrder": 3, "showInCalendar": true, "allowSync": true }, { "code": "meeting", "name": "פגישה", "nameEn": "Meeting", "color": "#8b5cf6", "icon": "users", "sortOrder": 4, "showInCalendar": true, "allowSync": true }, { "code": "deadline", "name": "דד-ליין", "nameEn": "Deadline", "color": "#ef4444", "icon": "alert-circle", "sortOrder": 5, "showInCalendar": true, "allowSync": true }, { "code": "milestone", "name": "אבן דרך", "nameEn": "Milestone", "color": "#06b6d4", "icon": "flag", "sortOrder": 6, "showInCalendar": true, "allowSync": true }, { "code": "call", "name": "שיחה", "nameEn": "Call", "color": "#6366f1", "icon": "phone", "sortOrder": 7, "showInCalendar": true, "allowSync": true }, { "code": "document", "name": "מסמך", "nameEn": "Document", "color": "#84cc16", "icon": "file-text", "sortOrder": 8, "showInCalendar": true, "allowSync": true }, { "code": "borrower_signatures", "name": "חתימות לווים", "nameEn": "Borrower Signatures", "color": "#0ea5e9", "icon": "pen-tool", "sortOrder": 55, "showInCalendar": true, "allowSync": true }, { "code": "custom", "name": "אחר", "nameEn": "Other", "color": "#6b7280", "icon": "calendar", "sortOrder": 99, "showInCalendar": true, "allowSync": true } ], "count": 10, "list_type": "calendar-event-types" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת רשימת אנשי קשר - **Method:** `GET` - **Path:** `/api-service/contacts` - **Operation ID:** `getContacts` - **Tags:** Contacts מחזיר את אנשי הקשר של הארגון (בנקאים, שמאים, עורכי דין וכו'), ללא אנשי קשר שנמחקו, מהחדש לישן, עם דפדוף. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בשם פרטי, שם משפחה, טלפון, אימייל וחברה. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` ##### `type` - **In:** `query` סינון לפי סוג איש קשר `string`, possible values: `"banker", "appraiser", "lawyer", "insurance", "contractor", "other"` #### Responses ##### Status: 200 רשימת אנשי קשר ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Contact` — איש קשר בארגון (בנקאי, עו"ד, שמאי וכד') - **`company`** `string` — חברה/ארגון - **`created_at`** `string`, format: `date-time` - **`custom_type`** `string | null` — סוג מותאם כאשר type = other - **`email`** `string`, format: `email` - **`first_name`** `string` — שם פרטי - **`id`** `string`, format: `uuid` - **`job_title`** `string` — תפקיד - **`last_name`** `string` — שם משפחה - **`notes`** `string` — הערות - **`organization_id`** `string`, format: `uuid` - **`phone`** `string` — טלפון - **`type`** `string`, possible values: `"banker", "lawyer", "appraiser", "insurance", "contractor", "other"` — סוג איש הקשר. כאשר other - אפשר לפרט ב-custom_type - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": null, "notes": "", "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת איש קשר - **Method:** `POST` - **Path:** `/api-service/contacts` - **Operation ID:** `createContact` - **Tags:** Contacts יוצר איש קשר בארגון. - חובה: first_name, last_name ו-type. שדה חסר מחזיר 400 עם validation. - type חייב להיות אחד מ: banker, appraiser, lawyer, insurance, contractor, other - אחרת 400, והערך שנשלח מוחזר ב-provided_type. כאשר type=other אפשר לפרט ב-custom_type. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Request Body פרטי איש הקשר **Required:** `true` ##### Content-Type: application/json schema: `CreateContact` — נתונים ליצירת איש קשר. first_name, last_name ו-type חובה. - **`first_name` (required)** `string` - **`last_name` (required)** `string` - **`type` (required)** `string`, possible values: `"banker", "lawyer", "appraiser", "insurance", "contractor", "other"` — סוג איש הקשר. כאשר other - אפשר לפרט ב-custom_type - **`company`** `string` - **`custom_type`** `string` - **`email`** `string`, format: `email` - **`job_title`** `string` - **`notes`** `string` - **`phone`** `string` **Example: default** ```json { "first_name": "Michal", "last_name": "Avraham", "type": "banker", "company": "Example Bank", "job_title": "Mortgage banker", "phone": "03-0000000", "email": "michal.avraham@example.com", "notes": "Handles the branch's mortgage files" } ``` #### Responses ##### Status: 201 איש הקשר נוצר ###### Content-Type: application/json *Schema `Contact` is shown above.* **Example: default** ```json { "id": "9e0f1a2b-3c4d-4e5f-a6b7-c8d9e0f1a2b3", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "first_name": "Michal", "last_name": "Avraham", "type": "banker", "company": "Example Bank", "job_title": "Mortgage banker", "phone": "03-0000000", "email": "michal.avraham@example.com", "notes": "Handles the branch's mortgage files", "custom_type": null, "created_at": "2026-10-14T08:15:22.481234+00:00", "updated_at": "2026-10-14T08:15:22.481234+00:00" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת איש קשר - **Method:** `GET` - **Path:** `/api-service/contacts/{id}` - **Operation ID:** `getContactById` - **Tags:** Contacts מחזיר איש קשר לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה איש הקשר `string`, format: `uuid` #### Responses ##### Status: 200 פרטי איש הקשר ###### Content-Type: application/json *Schema `Contact` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": null, "notes": "", "created_at": "", "updated_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון איש קשר - **Method:** `PUT` - **Path:** `/api-service/contacts/{id}` - **Operation ID:** `replaceContact` - **Tags:** Contacts עדכון חלקי: רק השדות שנשלחו מתעדכנים - גם ב-PUT, שזהה ל-PATCH. type נבדק מול רשימת הסוגים המותרים (אחרת 400). אם לא נשלח אף שדה שניתן לעדכן - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה איש הקשר `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json schema: `UpdateContact` — עדכון חלקי של איש קשר (כל השדות אופציונליים) - **`company`** `string` - **`custom_type`** `string` - **`email`** `string`, format: `email` - **`first_name`** `string` - **`job_title`** `string` - **`last_name`** `string` - **`notes`** `string` - **`phone`** `string` - **`type`** `string`, possible values: `"banker", "lawyer", "appraiser", "insurance", "contractor", "other"` — סוג איש הקשר. כאשר other - אפשר לפרט ב-custom_type **Example:** ```json { "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": "", "notes": "" } ``` #### Responses ##### Status: 200 איש הקשר המעודכן ###### Content-Type: application/json *Schema `Contact` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": null, "notes": "", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של איש קשר - **Method:** `PATCH` - **Path:** `/api-service/contacts/{id}` - **Operation ID:** `updateContact` - **Tags:** Contacts עדכון חלקי: רק השדות שנשלחו מתעדכנים - גם ב-PUT, שזהה ל-PATCH. type נבדק מול רשימת הסוגים המותרים (אחרת 400). אם לא נשלח אף שדה שניתן לעדכן - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה איש הקשר `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json *Schema `UpdateContact` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": "", "notes": "" } ``` #### Responses ##### Status: 200 איש הקשר המעודכן ###### Content-Type: application/json *Schema `Contact` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": null, "notes": "", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### מחיקת איש קשר - **Method:** `DELETE` - **Path:** `/api-service/contacts/{id}` - **Operation ID:** `deleteContact` - **Tags:** Contacts מחיקה רכה (soft delete): איש הקשר לא יוחזר עוד בשליפות. לא ניתן למחוק איש קשר שמקושר לתיק משכנתא - 409 עם related_mortgages_count. יש לנתק אותו מהתיקים באפליקציה (ה-API אינו כולל פעולת ניתוק). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה איש הקשר `string`, format: `uuid` #### Responses ##### Status: 200 איש הקשר נמחק ###### Content-Type: application/json *Schema `DeleteResult` is shown above.* **Example: default** ```json { "success": true, "message": "Contact deleted successfully" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 איש הקשר מקושר לתיקי משכנתא. מספר הקישורים מוחזר ב-related_mortgages_count ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Cannot delete contact", "details": "This contact is linked to active mortgage files. You must unlink them first.", "status": 409, "related_mortgages_count": 1 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת רשימת משימות - **Method:** `GET` - **Path:** `/api-service/tasks` - **Operation ID:** `getTasks` - **Tags:** Tasks מחזיר את משימות הארגון (ללא משימות שנמחקו), כל אחת עם תקציר הישות המקושרת (mortgage_file / lead / customer, או null). ממוין לפי due_date בסדר עולה (משימות ללא מועד בסוף), ואחר כך מהחדשה לישנה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `mortgage_file_id` - **In:** `query` רק משימות שמקושרות לתיק `string`, format: `uuid` ##### `lead_id` - **In:** `query` רק משימות שמקושרות לליד `string`, format: `uuid` ##### `customer_id` - **In:** `query` רק משימות שמקושרות ללקוח `string`, format: `uuid` ##### `standalone` - **In:** `query` true - רק משימות עצמאיות, שאינן מקושרות לתיק, ליד או לקוח `boolean`, default: `false` ##### `status` - **In:** `query` סינון לפי סטטוס `string`, possible values: `"open", "in_progress", "completed", "cancelled"` ##### `priority` - **In:** `query` סינון לפי עדיפות `string`, possible values: `"low", "medium", "high"` ##### `assigned_to` - **In:** `query` סינון לפי המשתמש שהמשימה מוקצית לו `string`, format: `uuid` ##### `unassigned` - **In:** `query` true - רק משימות שלא הוקצו למשתמש `boolean`, default: `false` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בכותרת ובתיאור. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 רשימת משימות ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Task` — משימה. יכולה להיות מקושרת לתיק משכנתא, ליד, לקוח - או standalone (כל ה-\*\_id יכולים להיות null). התגובה כוללת objects של הישות המקושרת (\`mortgage_file\`/\`lead\`/\`customer\`) אם קיימת. - **`assigned_to`** `string | null`, format: `uuid` - **`completed_at`** `string | null`, format: `date-time` - **`completed_by`** `string | null`, format: `uuid` - **`created_at`** `string`, format: `date-time` - **`customer`** `object | null` — פרטי הלקוח המקושר (null אם לא מקושר) - **`first_name`** `string | null` - **`id`** `string`, format: `uuid` - **`id_number`** `string | null` - **`last_name`** `string | null` - **`customer_id`** `string | null`, format: `uuid` - **`description`** `string | null` - **`due_date`** `string | null`, format: `date-time` — מועד יעד - **`id`** `string`, format: `uuid` - **`is_favorite`** `boolean` - **`lead`** `object | null` — פרטי הליד המקושר (null אם לא מקושר) - **`first_name`** `string | null` - **`id`** `string`, format: `uuid` - **`last_name`** `string | null` - **`phone`** `string | null` - **`status`** `string | null` - **`lead_id`** `string | null`, format: `uuid` - **`mortgage_file`** `object | null` — פרטי התיק המקושר (null אם לא מקושר) - **`file_number`** `string | null` - **`id`** `string`, format: `uuid` - **`status`** `string | null` - **`title`** `string | null` - **`mortgage_file_id`** `string | null`, format: `uuid` - **`organization_id`** `string`, format: `uuid` - **`parent_task_id`** `string | null`, format: `uuid` - **`priority`** `string`, possible values: `"low", "medium", "high"` - **`progress`** `number`, minimum: `0`, maximum: `100` — אחוז התקדמות - **`status`** `string`, possible values: `"open", "in_progress", "completed", "cancelled"` - **`title`** `string` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת משימה - **Method:** `POST` - **Path:** `/api-service/tasks` - **Operation ID:** `createTask` - **Tags:** Tasks יוצר משימה. אפשר לקשר אותה לתיק, ליד ו/או לקוח (mortgage_file_id / lead_id / customer_id), או ליצור משימה עצמאית בלי אף אחד מהם. - חובה: title (לא ריק) - אחרת 400. - כל מזהה ישות שנשלח חייב להיות של רשומה פעילה בארגון - אחרת 400. - ברירות מחדל: status=open, priority=medium. - status חייב להיות אחד מ-open, in_progress, completed, cancelled (אחרת 400); הערך הישן done מתקבל כ-completed. completed מסמן גם את completed_at. - parent_task_id חייב להיות משימה בארגון (אחרת 400). - assigned_to שאינו מזהה של משתמש פעיל בארגון מתעלמים ממנו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Request Body פרטי המשימה **Required:** `true` ##### Content-Type: application/json schema: `CreateTask` — נתונים ליצירת משימה. אפשר לקשר את המשימה לתיק, ליד ו/או לקוח, או להשאיר את שלושת המזהים ריקים ליצירת משימה עצמאית. שדות שאינם מופיעים כאן מתעלמים מהם. - **`title` (required)** `string` — כותרת המשימה (חובה, לא ריקה) - **`assigned_to`** `string`, format: `uuid` — מזהה משתמש בארגון. מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו, והמשימה נוצרת ללא הקצאה - **`customer_id`** `string | null`, format: `uuid` — לקוח לקישור. בנתיב /mortgage-files/{id}/tasks מתעלמים ממנו - **`description`** `string` - **`due_date`** `string`, format: `date-time` — מועד יעד (ISO 8601) - **`is_favorite`** `boolean` - **`lead_id`** `string | null`, format: `uuid` — ליד לקישור. בנתיב /mortgage-files/{id}/tasks מתעלמים ממנו - **`mortgage_file_id`** `string | null`, format: `uuid` — תיק לקישור. בנתיב /mortgage-files/{id}/tasks נלקח מהנתיב ומתעלמים מהערך כאן - **`parent_task_id`** `string`, format: `uuid` — מזהה משימת האב (לתת-משימה) - **`priority`** `string`, possible values: `"low", "medium", "high"`, default: `"medium"` - **`progress`** `number`, minimum: `0`, maximum: `100` — אחוז התקדמות - **`status`** `string`, possible values: `"open", "in_progress", "completed", "cancelled"`, default: `"open"` **Example: default** ```json { "title": "Collect pay slips", "description": "Last three pay slips for both borrowers", "due_date": "2026-11-01T09:00:00+00:00", "priority": "high", "mortgage_file_id": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f" } ``` #### Responses ##### Status: 201 המשימה נוצרה (כולל תקציר הישות המקושרת) ###### Content-Type: application/json *Schema `Task` is shown above.* **Example: default** ```json { "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "organization_id": "0b8e1f2a-7c3d-4a5b-9e6f-2a3b4c5d6e7f", "mortgage_file_id": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f", "lead_id": null, "customer_id": null, "title": "Collect pay slips", "description": "Last three pay slips for both borrowers", "status": "open", "priority": "high", "due_date": "2026-11-01T09:00:00+00:00", "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": false, "completed_at": null, "created_at": "2026-10-14T08:15:22.481234+00:00", "updated_at": "2026-10-14T08:15:22.481234+00:00", "mortgage_file": { "id": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f", "file_number": "2026-0042", "title": "Apartment purchase - Cohen family", "status": "setup" }, "lead": null, "customer": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת משימה - **Method:** `GET` - **Path:** `/api-service/tasks/{taskId}` - **Operation ID:** `getTask` - **Tags:** Tasks מחזיר משימה לפי מזהה, כולל תקציר הישות המקושרת. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Responses ##### Status: 200 המשימה ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון משימה - **Method:** `PUT` - **Path:** `/api-service/tasks/{taskId}` - **Operation ID:** `updateTask` - **Tags:** Tasks עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. בנתיב הזה אפשר גם להחליף או לנתק (null) את הישות המקושרת - mortgage_file_id, lead_id, customer_id; מזהה שנשלח חייב להיות של רשומה פעילה בארגון (אחרת 400). status כפוף לאותם כללים כמו ביצירה: מעבר ל-completed מסמן את completed_at, ויציאה מ-completed מאפסת אותו. parent_task_id חייב להיות משימה אחרת בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateTask` — עדכון חלקי של משימה: רק השדות שנשלחו מתעדכנים. החלפה או ניתוק (null) של הישות המקושרת אפשריים רק ב-PUT/PATCH /tasks/{taskId}; בנתיב /mortgage-files/{id}/tasks/{taskId} מתעלמים מהם. - **`assigned_to`** `string | null`, format: `uuid` — מזהה משתמש בארגון. null או מחרוזת ריקה מבטלים את ההקצאה; מזהה שאינו של משתמש פעיל בארגון מתעלמים ממנו - **`customer_id`** `string | null`, format: `uuid` — לקוח לקישור (null מנתק). חייב להיות לקוח פעיל בארגון - **`description`** `string` - **`due_date`** `string | null`, format: `date-time` — מועד יעד (ISO 8601) - **`is_favorite`** `boolean` - **`lead_id`** `string | null`, format: `uuid` — ליד לקישור (null מנתק). חייב להיות ליד בארגון - **`mortgage_file_id`** `string | null`, format: `uuid` — תיק לקישור (null מנתק). חייב להיות תיק פעיל בארגון - **`parent_task_id`** `string | null`, format: `uuid` — מזהה משימת האב - **`priority`** `string`, possible values: `"low", "medium", "high"` - **`progress`** `number`, minimum: `0`, maximum: `100` — אחוז התקדמות - **`status`** `string`, possible values: `"open", "in_progress", "completed", "cancelled"` - **`title`** `string` **Example:** ```json { "title": "", "description": "", "due_date": null, "status": "open", "priority": "low", "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` #### Responses ##### Status: 200 המשימה המעודכנת ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של משימה - **Method:** `PATCH` - **Path:** `/api-service/tasks/{taskId}` - **Operation ID:** `patchTask` - **Tags:** Tasks עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. בנתיב הזה אפשר גם להחליף או לנתק (null) את הישות המקושרת - mortgage_file_id, lead_id, customer_id; מזהה שנשלח חייב להיות של רשומה פעילה בארגון (אחרת 400). status כפוף לאותם כללים כמו ביצירה: מעבר ל-completed מסמן את completed_at, ויציאה מ-completed מאפסת אותו. parent_task_id חייב להיות משימה אחרת בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateTask` is shown above.* **Example:** ```json { "title": "", "description": "", "due_date": null, "status": "open", "priority": "low", "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` #### Responses ##### Status: 200 המשימה המעודכנת ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון סטטוס משימה - **Method:** `PATCH` - **Path:** `/api-service/tasks/{taskId}/status` - **Operation ID:** `patchTaskStatusTopLevel` - **Tags:** Tasks מעדכן את שדה status בלבד: open, in_progress, completed או cancelled (הערך הישן done מתקבל כ-completed). מעבר ל-completed מסמן את completed_at, ויציאה מ-completed מאפסת אותו. status חסר או לא מוכר מחזיר 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Request Body הסטטוס החדש **Required:** `true` ##### Content-Type: application/json - **`status` (required)** `string`, possible values: `"open", "in_progress", "completed", "cancelled"` **Example: default** ```json { "status": "completed" } ``` #### Responses ##### Status: 200 המשימה המעודכנת ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת ציר הזמן של תיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/timeline` - **Operation ID:** `getMortgageFileTimeline` - **Tags:** Timeline מחזיר את אירועי ציר הזמן של התיק, מהחדש לישן, עם דפדוף. קריאה בלבד. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `event_type` - **In:** `query` סינון לפי סוג אירוע - ערך מסוגי האירועים של המערכת, למשל status_updated, note_added, task_created, task_completed, charge_created, payment_received `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 אירועי ציר הזמן ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `TimelineEvent` — אירוע ציר-זמן (יצירת תיק, שינוי סטטוס, וכו') - **`created_at`** `string`, format: `date-time` - **`created_by`** `string | null`, format: `uuid` - **`description`** `string | null` - **`entity_id`** `string`, format: `uuid` - **`entity_type`** `string` - **`event_type`** `string` — סוג האירוע (למשל status_updated, note_added, task_created, file_created) - **`id`** `string`, format: `uuid` - **`metadata`** `object` — מטא-נתונים תלויי-סוג (old_status/new_status, וכו') - **`organization_id`** `string`, format: `uuid` - **`title`** `string` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "event_type": "", "title": "", "description": null, "metadata": {}, "created_by": null, "created_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת היסטוריית הסטטוסים של תיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/status-history` - **Operation ID:** `getMortgageFileStatusHistory` - **Tags:** Timeline כמו /timeline, מסונן לאירועי שינוי סטטוס (סוג אירוע status_updated, וברשומות ישנות status_change). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 אירועי ציר הזמן ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** *Schema `TimelineEvent` is shown above.* **Example:** ```json { "data": [ { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "event_type": "", "title": "", "description": null, "metadata": {}, "created_by": null, "created_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת משימות התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/tasks` - **Operation ID:** `getMortgageFileTasks` - **Tags:** Tasks כמו GET /tasks, מוגבל למשימות של התיק. ממוין לפי due_date בסדר עולה (משימות ללא מועד בסוף), ואחר כך מהחדשה לישנה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `status` - **In:** `query` סינון לפי סטטוס `string`, possible values: `"open", "in_progress", "completed", "cancelled"` ##### `priority` - **In:** `query` סינון לפי עדיפות `string`, possible values: `"low", "medium", "high"` ##### `assigned_to` - **In:** `query` סינון לפי המשתמש שהמשימה מוקצית לו `string`, format: `uuid` ##### `unassigned` - **In:** `query` true - רק משימות שלא הוקצו למשתמש `boolean`, default: `false` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בכותרת ובתיאור. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 משימות התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** *Schema `Task` is shown above.* **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת משימה בתיק - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/tasks` - **Operation ID:** `createMortgageFileTask` - **Tags:** Tasks יוצר משימה שמקושרת לתיק שבנתיב. title חובה (אחרת 400). mortgage_file_id, lead_id ו-customer_id שבגוף הבקשה אינם נשמרים. status ו-parent_task_id כפופים לאותם כללים כמו ב-POST /tasks. ברירות מחדל: status=open, priority=medium. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי המשימה **Required:** `true` ##### Content-Type: application/json *Schema `CreateTask` is shown above.* **Example:** ```json { "title": "", "description": "", "due_date": "", "status": "open", "priority": "medium", "assigned_to": "", "parent_task_id": "", "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` #### Responses ##### Status: 201 המשימה נוצרה ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת משימה מהתיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/tasks/{taskId}` - **Operation ID:** `getMortgageFileTask` - **Tags:** Tasks מחזיר משימה של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Responses ##### Status: 200 המשימה ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון משימה בתיק - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/tasks/{taskId}` - **Operation ID:** `updateMortgageFileTask` - **Tags:** Tasks עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. בנתיב הזה לא ניתן לשנות את הישויות המקושרות (mortgage_file_id, lead_id, customer_id) - לשם כך השתמשו ב-PUT /tasks/{taskId}. status כפוף לאותם כללים כמו ביצירה: מעבר ל-completed מסמן את completed_at, ויציאה מ-completed מאפסת אותו. parent_task_id חייב להיות משימה אחרת בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateTask` is shown above.* **Example:** ```json { "title": "", "description": "", "due_date": null, "status": "open", "priority": "low", "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` #### Responses ##### Status: 200 המשימה המעודכנת ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של משימה בתיק - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/tasks/{taskId}` - **Operation ID:** `patchMortgageFileTask` - **Tags:** Tasks עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. בנתיב הזה לא ניתן לשנות את הישויות המקושרות (mortgage_file_id, lead_id, customer_id) - לשם כך השתמשו ב-PUT /tasks/{taskId}. status כפוף לאותם כללים כמו ביצירה: מעבר ל-completed מסמן את completed_at, ויציאה מ-completed מאפסת אותו. parent_task_id חייב להיות משימה אחרת בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateTask` is shown above.* **Example:** ```json { "title": "", "description": "", "due_date": null, "status": "open", "priority": "low", "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` #### Responses ##### Status: 200 המשימה המעודכנת ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון סטטוס משימה בתיק - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/tasks/{taskId}/status` - **Operation ID:** `patchMortgageFileTaskStatus` - **Tags:** Tasks מעדכן את שדה status בלבד: open, in_progress, completed או cancelled (הערך הישן done מתקבל כ-completed). מעבר ל-completed מסמן את completed_at, ויציאה מ-completed מאפסת אותו. status חסר או לא מוכר מחזיר 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `taskId` required - **In:** `path` מזהה המשימה `string`, format: `uuid` #### Request Body הסטטוס החדש **Required:** `true` ##### Content-Type: application/json - **`status` (required)** `string`, possible values: `"open", "in_progress", "completed", "cancelled"` **Example: default** ```json { "status": "completed" } ``` #### Responses ##### Status: 200 המשימה המעודכנת ###### Content-Type: application/json *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת הערות התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/notes` - **Operation ID:** `getMortgageFileNotes` - **Tags:** Notes הערות נעוצות (is_pinned) קודם, ואחריהן מהחדשה לישנה. ללא הערות שנמחקו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בכותרת ובתוכן. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 הערות התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Note` — הערה על תיק משכנתא (entity_notes) - **`completed_at`** `string | null`, format: `date-time` - **`content`** `string` - **`created_at`** `string`, format: `date-time` - **`entity_id`** `string`, format: `uuid` - **`entity_type`** `string` - **`id`** `string`, format: `uuid` - **`is_completed`** `boolean` - **`is_locked`** `boolean` — הערה נעולה ניתנת לעדכון רק בבקשה שגם משחררת אותה (is_locked: false) - **`is_pinned`** `boolean` - **`organization_id`** `string`, format: `uuid` - **`title`** `string | null` - **`updated_at`** `string | null`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": null, "content": "", "is_pinned": true, "is_locked": true, "is_completed": true, "completed_at": null, "created_at": "", "updated_at": null } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת הערה בתיק - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/notes` - **Operation ID:** `createMortgageFileNote` - **Tags:** Notes content חובה (לא ריק) - אחרת 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי ההערה **Required:** `true` ##### Content-Type: application/json schema: `CreateNote` — נתונים ליצירת הערה. content חובה. - **`content` (required)** `string` - **`is_completed`** `boolean`, default: `false` - **`is_locked`** `boolean`, default: `false` - **`is_pinned`** `boolean`, default: `false` - **`title`** `string` **Example: default** ```json { "title": "Call with the bank", "content": "The bank requested an up-to-date balance confirmation for the existing mortgage", "is_pinned": true } ``` #### Responses ##### Status: 201 ההערה נוצרה ###### Content-Type: application/json *Schema `Note` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": null, "content": "", "is_pinned": true, "is_locked": true, "is_completed": true, "completed_at": null, "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת הערה - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/notes/{noteId}` - **Operation ID:** `getMortgageFileNote` - **Tags:** Notes מחזיר הערה של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `noteId` required - **In:** `path` מזהה ההערה `string`, format: `uuid` #### Responses ##### Status: 200 ההערה ###### Content-Type: application/json *Schema `Note` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": null, "content": "", "is_pinned": true, "is_locked": true, "is_completed": true, "completed_at": null, "created_at": "", "updated_at": null } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון הערה - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/notes/{noteId}` - **Operation ID:** `updateMortgageFileNote` - **Tags:** Notes עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. is_completed=true מסמן גם את completed_at. הערה נעולה (is_locked=true) מחזירה 409, אלא אם הבקשה משחררת אותה (is_locked: false); אפשר לשלב את השחרור עם שינויים נוספים באותה בקשה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `noteId` required - **In:** `path` מזהה ההערה `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateNote` - **`content`** `string` - **`is_completed`** `boolean` - **`is_locked`** `boolean` - **`is_pinned`** `boolean` - **`title`** `string` **Example:** ```json { "title": "", "content": "", "is_pinned": true, "is_locked": true, "is_completed": true } ``` #### Responses ##### Status: 200 ההערה המעודכנת ###### Content-Type: application/json *Schema `Note` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": null, "content": "", "is_pinned": true, "is_locked": true, "is_completed": true, "completed_at": null, "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 ההערה נעולה (is_locked=true) והבקשה אינה משחררת אותה ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Note is locked", "details": "Unlock the note before editing", "status": 409 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של הערה - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/notes/{noteId}` - **Operation ID:** `patchMortgageFileNote` - **Tags:** Notes עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. is_completed=true מסמן גם את completed_at. הערה נעולה (is_locked=true) מחזירה 409, אלא אם הבקשה משחררת אותה (is_locked: false); אפשר לשלב את השחרור עם שינויים נוספים באותה בקשה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `noteId` required - **In:** `path` מזהה ההערה `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateNote` is shown above.* **Example:** ```json { "title": "", "content": "", "is_pinned": true, "is_locked": true, "is_completed": true } ``` #### Responses ##### Status: 200 ההערה המעודכנת ###### Content-Type: application/json *Schema `Note` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": null, "content": "", "is_pinned": true, "is_locked": true, "is_completed": true, "completed_at": null, "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 ההערה נעולה (is_locked=true) והבקשה אינה משחררת אותה ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Note is locked", "details": "Unlock the note before editing", "status": 409 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת אנשי הקשר של התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/contacts` - **Operation ID:** `getMortgageFileContacts` - **Tags:** File contacts מחזיר את הקישורים הפעילים של אנשי קשר לתיק, מהחדש לישן, כל אחד עם פרטי איש הקשר (contact). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 קישורי אנשי הקשר ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `MortgageContactLink` — קישור איש-קשר לתיק (mortgage_contacts) - **`contact`** `object` — פרטי איש הקשר (joined) - **`company`** `string | null` - **`custom_type`** `string | null` - **`email`** `string | null` - **`first_name`** `string` - **`id`** `string`, format: `uuid` - **`job_title`** `string | null` - **`last_name`** `string` - **`phone`** `string | null` - **`type`** `string` - **`contact_id`** `string`, format: `uuid` - **`created_at`** `string`, format: `date-time` - **`id`** `string`, format: `uuid` - **`mortgage_file_id`** `string`, format: `uuid` - **`notes`** `string | null` - **`organization_id`** `string`, format: `uuid` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "contact_id": "", "notes": null, "contact": { "id": "", "first_name": "", "last_name": "", "type": "", "custom_type": null, "email": null, "phone": null, "company": null, "job_title": null }, "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### קישור איש קשר לתיק - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/contacts` - **Operation ID:** `linkMortgageFileContact` - **Tags:** File contacts contact_id חובה (אחרת 400) וחייב להיות של איש קשר פעיל בארגון (אחרת 404). אם איש הקשר כבר מקושר לתיק - 409, ומזהה הקישור הקיים מוחזר ב-existing_link_id. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`contact_id` (required)** `string`, format: `uuid` — מזהה איש הקשר - **`notes`** `string` — הערות לקישור **Example: default** ```json { "contact_id": "9e0f1a2b-3c4d-4e5f-a6b7-c8d9e0f1a2b3", "notes": "The banker handling the file" } ``` #### Responses ##### Status: 201 הקישור נוצר ###### Content-Type: application/json *Schema `MortgageContactLink` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "contact_id": "", "notes": null, "contact": { "id": "", "first_name": "", "last_name": "", "type": "", "custom_type": null, "email": null, "phone": null, "company": null, "job_title": null }, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 איש הקשר כבר מקושר לתיק. מזהה הקישור הקיים מוחזר ב-existing_link_id ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Contact already linked", "details": "Use PUT to update link notes", "status": 409, "existing_link_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון הערות הקישור - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/contacts/{linkId}` - **Operation ID:** `updateMortgageFileContactLink` - **Tags:** File contacts ניתן לעדכן רק את notes (PUT ו-PATCH זהים). בקשה בלי notes מחזירה 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `linkId` required - **In:** `path` מזהה הקישור (id מתוך רשימת אנשי הקשר של התיק - לא מזהה איש הקשר) `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`notes`** `string` — הערות לקישור **Example: default** ```json { "notes": "The banker handling the file" } ``` #### Responses ##### Status: 200 הקישור המעודכן ###### Content-Type: application/json *Schema `MortgageContactLink` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "contact_id": "", "notes": null, "contact": { "id": "", "first_name": "", "last_name": "", "type": "", "custom_type": null, "email": null, "phone": null, "company": null, "job_title": null }, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של הערות הקישור - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/contacts/{linkId}` - **Operation ID:** `patchMortgageFileContactLink` - **Tags:** File contacts ניתן לעדכן רק את notes (PUT ו-PATCH זהים). בקשה בלי notes מחזירה 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `linkId` required - **In:** `path` מזהה הקישור (id מתוך רשימת אנשי הקשר של התיק - לא מזהה איש הקשר) `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`notes`** `string` — הערות לקישור **Example: default** ```json { "notes": "The banker handling the file" } ``` #### Responses ##### Status: 200 הקישור המעודכן ###### Content-Type: application/json *Schema `MortgageContactLink` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "contact_id": "", "notes": null, "contact": { "id": "", "first_name": "", "last_name": "", "type": "", "custom_type": null, "email": null, "phone": null, "company": null, "job_title": null }, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת העוקבים אחר התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/watchers` - **Operation ID:** `getMortgageFileWatchers` - **Tags:** Watchers מחזיר את המשתמשים שעוקבים אחר התיק, מהחדש לישן, כל אחד עם פרטי המשתמש (watcher). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 העוקבים ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Watcher` — משתמש העוקב אחר תיק (mortgage_file_watchers). הערה: \`email\` לא זמין דרך ה-API החיצוני (האימייל יושב ב-auth.users, נפרד מ-profiles). - **`created_at`** `string`, format: `date-time` - **`id`** `string`, format: `uuid` - **`mortgage_file_id`** `string`, format: `uuid` - **`organization_id`** `string`, format: `uuid` - **`watcher`** `object` — פרטי המשתמש (joined מ-profiles) - **`first_name`** `string` - **`id`** `string`, format: `uuid` - **`last_name`** `string` - **`watcher_id`** `string`, format: `uuid` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "watcher_id": "", "watcher": { "id": "", "first_name": "", "last_name": "" }, "created_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### הוספת עוקב לתיק - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/watchers` - **Operation ID:** `addMortgageFileWatcher` - **Tags:** Watchers watcher_id חובה (אחרת 400) וחייב להיות מזהה של משתמש פעיל בארגון (אחרת 404). אם המשתמש כבר עוקב - 409, ומזהה הרשומה הקיימת מוחזר ב-existing_id. ה-API אינו כולל פעולת הסרה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`watcher_id` (required)** `string`, format: `uuid` — מזהה המשתמש (הפרופיל) שיעקוב אחר התיק **Example: default** ```json { "watcher_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a" } ``` #### Responses ##### Status: 201 העוקב נוסף ###### Content-Type: application/json *Schema `Watcher` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "watcher_id": "", "watcher": { "id": "", "first_name": "", "last_name": "" }, "created_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 המשתמש כבר עוקב אחר התיק. מזהה הרשומה הקיימת מוחזר ב-existing_id ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Watcher already attached", "status": 409, "existing_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e" } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת מסמכי התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/documents` - **Operation ID:** `getMortgageFileDocuments` - **Tags:** Documents מטא-דאטה של מסמכי הלקוח בתיק, מהחדש לישן. קריאה בלבד - תוכן הקבצים אינו זמין דרך ה-API. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `borrower_id` - **In:** `query` סינון לפי לווה `string`, format: `uuid` ##### `category` - **In:** `query` סינון לפי קטגוריה (התאמה מדויקת) `string` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בשם הקובץ המקורי ובקטגוריה. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 מסמכי התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `ClientDocument` — מסמך לקוח (מטא-דאטה; תוכן ב-Supabase Storage) - **`borrower_id`** `string | null`, format: `uuid` - **`category`** `string | null` - **`created_at`** `string`, format: `date-time` - **`drive_file_id`** `string | null` - **`drive_folder_id`** `string | null` - **`file_path`** `string` - **`file_size`** `integer | null` - **`file_type`** `string | null` - **`id`** `string`, format: `uuid` - **`mortgage_file_id`** `string`, format: `uuid` - **`needs_signature`** `boolean` - **`organization_id`** `string`, format: `uuid` - **`original_name`** `string` - **`stored_name`** `string` - **`uploaded_by_id`** `string | null`, format: `uuid` - **`uploaded_by_type`** `string`, possible values: `"borrower", "advisor"` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "original_name": "", "stored_name": "", "file_path": "", "file_size": null, "file_type": null, "category": null, "needs_signature": true, "uploaded_by_type": "borrower", "uploaded_by_id": null, "drive_folder_id": null, "drive_file_id": null, "created_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת מסמך - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/documents/{docId}` - **Operation ID:** `getMortgageFileDocument` - **Tags:** Documents מטא-דאטה של מסמך בתיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `docId` required - **In:** `path` מזהה המסמך `string`, format: `uuid` #### Responses ##### Status: 200 המסמך ###### Content-Type: application/json *Schema `ClientDocument` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "original_name": "", "stored_name": "", "file_path": "", "file_size": null, "file_type": null, "category": null, "needs_signature": true, "uploaded_by_type": "borrower", "uploaded_by_id": null, "drive_folder_id": null, "drive_file_id": null, "created_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת חתימות התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/signatures` - **Operation ID:** `getMortgageFileSignatures` - **Tags:** Signatures מחזיר את רשומות החתימה על מסמכים ששייכים לתיק, מהחדשה לישנה, כל אחת עם פרטי המסמך (document). קריאה בלבד. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 חתימות ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `DocumentSignature` — חתימה על מסמך - **`borrower_id`** `string`, format: `uuid` - **`created_at`** `string`, format: `date-time` - **`document`** `object` — פרטי המסמך (joined) - **`borrower_id`** `string | null`, format: `uuid` - **`file_path`** `string` - **`id`** `string`, format: `uuid` - **`mortgage_file_id`** `string`, format: `uuid` - **`original_name`** `string` - **`document_id`** `string`, format: `uuid` - **`id`** `string`, format: `uuid` - **`is_signed`** `boolean` - **`organization_id`** `string`, format: `uuid` - **`signature_date`** `string | null`, format: `date-time` - **`signed_at`** `string | null`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "document_id": "", "borrower_id": "", "is_signed": true, "signed_at": null, "signature_date": null, "document": { "id": "", "original_name": "", "mortgage_file_id": "", "borrower_id": null, "file_path": "" }, "created_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת מסמכים שהופקו לתיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/generated-documents` - **Operation ID:** `getMortgageFileGeneratedDocuments` - **Tags:** Generated documents מסמכים שהופקו מתבניות עבור התיק, מהחדש לישן. קריאה בלבד. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `status` - **In:** `query` סינון לפי סטטוס המסמך `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 מסמכים שהופקו ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `GeneratedDocument` — מסמך שיוצר מתבנית (generated_documents) - **`created_at`** `string`, format: `date-time` - **`document_name`** `string` - **`entity_id`** `string`, format: `uuid` - **`entity_type`** `string` - **`filled_content`** `string | null` - **`filled_variables`** `object` - **`id`** `string`, format: `uuid` - **`organization_id`** `string`, format: `uuid` - **`pdf_path`** `string | null` - **`signatures`** `array` **Items:** `object` - **`status`** `string` - **`template_id`** `string | null`, format: `uuid` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "template_id": null, "entity_type": "mortgage_file", "entity_id": "", "document_name": "", "filled_content": null, "filled_variables": {}, "signatures": [ {} ], "pdf_path": null, "status": "", "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת מסמך שהופק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/generated-documents/{docId}` - **Operation ID:** `getMortgageFileGeneratedDocument` - **Tags:** Generated documents מסמך שהופק מתבנית עבור התיק, לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `docId` required - **In:** `path` מזהה המסמך שהופק `string`, format: `uuid` #### Responses ##### Status: 200 המסמך ###### Content-Type: application/json *Schema `GeneratedDocument` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "template_id": null, "entity_type": "mortgage_file", "entity_id": "", "document_name": "", "filled_content": null, "filled_variables": {}, "signatures": [ {} ], "pdf_path": null, "status": "", "created_at": "", "updated_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת סטטוסי המסמכים של התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/document-statuses` - **Operation ID:** `getMortgageFileDocumentStatuses` - **Tags:** Document statuses שורות המעקב אחר המסמכים שנדרשו מהלווים בתיק (כולל מסמכים לחתימה), מהחדשה לישנה. השורות נוצרות על ידי המערכת - ה-API אינו כולל יצירה או מחיקה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `status` - **In:** `query` סינון לפי סטטוס `string`, possible values: `"pending", "uploading", "under_review", "completed", "rejected"` ##### `borrower_id` - **In:** `query` סינון לפי לווה `string`, format: `uuid` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 סטטוסי המסמכים ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `ClientDocumentStatus` — סטטוס מסמך נדרש פר-לווה - **`borrower_id`** `string | null`, format: `uuid` - **`created_at`** `string`, format: `date-time` - **`document_type_id`** `string` - **`document_type_title`** `string` - **`hide_from_client`** `boolean` - **`id`** `string`, format: `uuid` - **`mortgage_file_id`** `string`, format: `uuid` - **`notes`** `object` — מטא-נתונים של המסמך, כולל status_history - **`organization_id`** `string`, format: `uuid` - **`status`** `string`, possible values: `"pending", "uploading", "under_review", "completed", "rejected"` - **`updated_at`** `string`, format: `date-time` - **`upload_progress`** `integer`, minimum: `0`, maximum: `100` - **`uploaded_document_id`** `string | null`, format: `uuid` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "document_type_id": "", "document_type_title": "", "status": "pending", "uploaded_document_id": null, "upload_progress": 0, "notes": {}, "hide_from_client": true, "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון סטטוס מסמך - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/document-statuses/{statusId}` - **Operation ID:** `updateMortgageFileDocumentStatus` - **Tags:** Document statuses ניתן לעדכן status ו-notes בלבד (PUT ו-PATCH זהים). אם לא נשלח אף אחד מהם - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `statusId` required - **In:** `path` מזהה שורת הסטטוס `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`notes`** `object` — מחליף את אובייקט ה-notes השמור כולו (כולל status_history) - **`status`** `string`, possible values: `"pending", "uploading", "under_review", "completed", "rejected"` — הסטטוס החדש **Example: default** ```json { "status": "completed" } ``` #### Responses ##### Status: 200 שורת הסטטוס המעודכנת ###### Content-Type: application/json *Schema `ClientDocumentStatus` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "document_type_id": "", "document_type_title": "", "status": "pending", "uploaded_document_id": null, "upload_progress": 0, "notes": {}, "hide_from_client": true, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של סטטוס מסמך - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/document-statuses/{statusId}` - **Operation ID:** `patchMortgageFileDocumentStatus` - **Tags:** Document statuses ניתן לעדכן status ו-notes בלבד (PUT ו-PATCH זהים). אם לא נשלח אף אחד מהם - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `statusId` required - **In:** `path` מזהה שורת הסטטוס `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`notes`** `object` — מחליף את אובייקט ה-notes השמור כולו (כולל status_history) - **`status`** `string`, possible values: `"pending", "uploading", "under_review", "completed", "rejected"` — הסטטוס החדש **Example: default** ```json { "status": "completed" } ``` #### Responses ##### Status: 200 שורת הסטטוס המעודכנת ###### Content-Type: application/json *Schema `ClientDocumentStatus` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "document_type_id": "", "document_type_title": "", "status": "pending", "uploaded_document_id": null, "upload_progress": 0, "notes": {}, "hide_from_client": true, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תזכורות התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/reminders` - **Operation ID:** `getMortgageFileReminders` - **Tags:** Reminders ממוין לפי remind_at (המוקדמת קודם). כברירת מחדל מוחזרות רק תזכורות שטרם נשלחו ולא בוטלו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `include_sent` - **In:** `query` true - לכלול גם תזכורות שכבר נשלחו `boolean`, default: `false` ##### `include_dismissed` - **In:** `query` true - לכלול גם תזכורות שבוטלו `boolean`, default: `false` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 תזכורות התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `Reminder` — תזכורת על תיק (reminders) - **`channels`** `array` **Items:** `string` - **`created_at`** `string`, format: `date-time` - **`description`** `string | null` - **`dismissed_at`** `string | null`, format: `date-time` - **`entity_id`** `string`, format: `uuid` - **`entity_type`** `string` - **`id`** `string`, format: `uuid` - **`is_dismissed`** `boolean` - **`is_sent`** `boolean` - **`metadata`** `object` - **`organization_id`** `string`, format: `uuid` - **`recipient_user_id`** `string | null`, format: `uuid` — מזהה המשתמש שמקבל את התזכורת. חייב להיות משתמש בארגון - **`remind_at`** `string`, format: `date-time` - **`sent_at`** `string | null`, format: `date-time` - **`title`** `string` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": "", "description": null, "remind_at": "", "channels": [ "notification", "email" ], "metadata": {}, "recipient_user_id": null, "is_sent": true, "sent_at": null, "is_dismissed": true, "dismissed_at": null, "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת תזכורת לתיק - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/reminders` - **Operation ID:** `createMortgageFileReminder` - **Tags:** Reminders חובה: title (לא ריק) ו-remind_at (חותמת זמן ISO 8601) - אחרת 400. channels ברירת מחדל: \["notification"]. recipient_user_id (אופציונלי) חייב להיות משתמש בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי התזכורת **Required:** `true` ##### Content-Type: application/json schema: `CreateReminder` - **`remind_at` (required)** `string`, format: `date-time` - **`title` (required)** `string` - **`channels`** `array` **Items:** `string` - **`description`** `string` - **`metadata`** `object` - **`recipient_user_id`** `string`, format: `uuid` — מזהה המשתמש שמקבל את התזכורת. חייב להיות משתמש בארגון **Example: default** ```json { "title": "Follow up with the bank on the approval in principle", "remind_at": "2026-10-20T07:00:00+00:00", "recipient_user_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a" } ``` #### Responses ##### Status: 201 התזכורת נוצרה ###### Content-Type: application/json *Schema `Reminder` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": "", "description": null, "remind_at": "", "channels": [ "notification", "email" ], "metadata": {}, "recipient_user_id": null, "is_sent": true, "sent_at": null, "is_dismissed": true, "dismissed_at": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תזכורת - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/reminders/{reminderId}` - **Operation ID:** `getMortgageFileReminder` - **Tags:** Reminders מחזיר תזכורת של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `reminderId` required - **In:** `path` מזהה התזכורת `string`, format: `uuid` #### Responses ##### Status: 200 התזכורת ###### Content-Type: application/json *Schema `Reminder` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": "", "description": null, "remind_at": "", "channels": [ "notification", "email" ], "metadata": {}, "recipient_user_id": null, "is_sent": true, "sent_at": null, "is_dismissed": true, "dismissed_at": null, "created_at": "", "updated_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון תזכורת - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/reminders/{reminderId}` - **Operation ID:** `updateMortgageFileReminder` - **Tags:** Reminders עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. is_dismissed=true מסמן גם את dismissed_at. recipient_user_id (אם נשלח) חייב להיות משתמש בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `reminderId` required - **In:** `path` מזהה התזכורת `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateReminder` - **`channels`** `array` **Items:** `string` - **`description`** `string` - **`is_dismissed`** `boolean` - **`metadata`** `object` - **`recipient_user_id`** `string`, format: `uuid` — מזהה המשתמש שמקבל את התזכורת. חייב להיות משתמש בארגון - **`remind_at`** `string`, format: `date-time` - **`title`** `string` **Example:** ```json { "title": "", "description": "", "remind_at": "", "channels": [ "" ], "metadata": {}, "recipient_user_id": "", "is_dismissed": true } ``` #### Responses ##### Status: 200 התזכורת המעודכנת ###### Content-Type: application/json *Schema `Reminder` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": "", "description": null, "remind_at": "", "channels": [ "notification", "email" ], "metadata": {}, "recipient_user_id": null, "is_sent": true, "sent_at": null, "is_dismissed": true, "dismissed_at": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של תזכורת - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/reminders/{reminderId}` - **Operation ID:** `patchMortgageFileReminder` - **Tags:** Reminders עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. is_dismissed=true מסמן גם את dismissed_at. recipient_user_id (אם נשלח) חייב להיות משתמש בארגון (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `reminderId` required - **In:** `path` מזהה התזכורת `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateReminder` is shown above.* **Example:** ```json { "title": "", "description": "", "remind_at": "", "channels": [ "" ], "metadata": {}, "recipient_user_id": "", "is_dismissed": true } ``` #### Responses ##### Status: 200 התזכורת המעודכנת ###### Content-Type: application/json *Schema `Reminder` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": "", "description": null, "remind_at": "", "channels": [ "notification", "email" ], "metadata": {}, "recipient_user_id": null, "is_sent": true, "sent_at": null, "is_dismissed": true, "dismissed_at": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת חיובי התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/charges` - **Operation ID:** `getMortgageFileCharges` - **Tags:** Charges ממוין לפי due_date בסדר עולה (חיובים ללא תאריך בסוף), ואחר כך מהחדש לישן. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `status` - **In:** `query` סינון לפי סטטוס `string`, possible values: `"pending", "partial", "paid", "cancelled"` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 חיובי התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `MortgageCharge` — חיוב (דרישת תשלום) על תיק. התגובה עשויה לכלול עמודות נוספות של אינטגרציית הסליקה שאינן מתועדות כאן. - **`amount`** `number` - **`created_at`** `string`, format: `date-time` - **`description`** `string | null` - **`document_is_cancelled`** `boolean` - **`due_date`** `string | null`, format: `date` — תאריך הגבייה. בחיוב שמקושר לאבן דרך עשוי להיקבע אוטומטית - ראו due_date_source - **`due_date_source`** `string`, possible values: `"manual", "milestone"`, readOnly — מקור תאריך הגבייה (נקבע על ידי המערכת): manual - הוזן ידנית ולעולם אינו נדרס אוטומטית; milestone - נקבע אוטומטית עם ביצוע אבן הדרך המקושרת - **`external_document_id`** `string | null` — קיים → החיוב ננעל לעריכה - **`external_document_number`** `string | null` - **`external_document_type`** `string | null` - **`external_document_url`** `string | null` - **`external_provider`** `string | null` - **`id`** `string`, format: `uuid` - **`includes_vat`** `boolean` - **`is_ancillary_charge`** `boolean` — true = חיוב נלווה (למשל נסח טאבו או שליחויות); false = שכר טרחה - **`item_name`** `string` - **`milestone_due_offset_days`** `integer` — כמה ימים אחרי ביצוע אבן הדרך ייקבע תאריך הגבייה (0 = יום הביצוע) - **`milestone_id`** `string | null` — מזהה אבן הדרך שהחיוב מקושר אליה (מזהה מתצורת אבני הדרך של הארגון, או מזהה אבן דרך מותאמת לתיק). נשלח תמיד יחד עם milestone_status_key - **`milestone_status_key`** `string | null` — מפתח הסטטוס שאבן הדרך המקושרת שייכת אליו. נשלח תמיד יחד עם milestone_id - **`mortgage_file_id`** `string`, format: `uuid` - **`notes`** `string | null` - **`organization_id`** `string`, format: `uuid` - **`status`** `string`, possible values: `"pending", "partial", "paid", "cancelled"` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "item_name": "", "description": null, "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": null, "due_date_source": "manual", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1, "status": "pending", "notes": null, "external_document_id": null, "external_document_number": null, "external_document_type": null, "external_document_url": null, "external_provider": null, "document_is_cancelled": true, "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת חיוב - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/charges` - **Operation ID:** `createMortgageFileCharge` - **Tags:** Charges חובה: item_name (לא ריק) ו-amount (מספר אי-שלילי) - אחרת 400. ברירות מחדל: status=pending, includes_vat=true, is_ancillary_charge=false, milestone_due_offset_days=0. **קישור לאבן דרך:** milestone_id ו-milestone_status_key מזהים יחד אבן דרך בתיק, ויש לשלוח את שניהם או אף אחד מהם - שליחת אחד בלבד מחזירה 400 (Invalid milestone link). כשאבן הדרך המקושרת מסומנת כבוצעה, due_date נקבע אוטומטית ליום הביצוע + milestone_due_offset_days (בחיוב בסטטוס pending או partial), וקישור לאבן דרך שכבר בוצעה קובע את התאריך מיד. תאריך שהוזן ידנית לעולם אינו נדרס; מקור התאריך מוצג ב-due_date_source. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי החיוב **Required:** `true` ##### Content-Type: application/json schema: `CreateMortgageCharge` — נתונים ליצירת חיוב. milestone_id ו-milestone_status_key נשלחים יחד או לא נשלחים כלל - אחרת 400. - **`amount` (required)** `number`, minimum: `0` — סכום (מספר אי-שלילי) - **`item_name` (required)** `string` — שם הפריט (חובה, לא ריק) - **`description`** `string` - **`due_date`** `string`, format: `date` — תאריך הגבייה (YYYY-MM-DD) - **`includes_vat`** `boolean`, default: `true` — האם הסכום כולל מע"מ - **`is_ancillary_charge`** `boolean`, default: `false` — true = חיוב נלווה (למשל נסח טאבו או שליחויות); false = שכר טרחה - **`milestone_due_offset_days`** `integer`, default: `0` — כמה ימים אחרי ביצוע אבן הדרך ייקבע תאריך הגבייה (0 = יום הביצוע) - **`milestone_id`** `string` — מזהה אבן הדרך לקישור. חובה לשלוח יחד עם milestone_status_key - **`milestone_status_key`** `string` — מפתח הסטטוס של אבן הדרך. חובה לשלוח יחד עם milestone_id - **`notes`** `string` - **`status`** `string`, possible values: `"pending", "partial", "paid", "cancelled"`, default: `"pending"` **Example: default** ```json { "item_name": "Advisory fee - stage 2", "amount": 4500, "includes_vat": true, "is_ancillary_charge": false, "milestone_id": "8f9a0b1c-2d3e-4f5a-9b6c-7d8e9f0a1b2c", "milestone_status_key": "pending_approval", "milestone_due_offset_days": 3 } ``` #### Responses ##### Status: 201 החיוב נוצר ###### Content-Type: application/json *Schema `MortgageCharge` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "item_name": "", "description": null, "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": null, "due_date_source": "manual", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1, "status": "pending", "notes": null, "external_document_id": null, "external_document_number": null, "external_document_type": null, "external_document_url": null, "external_provider": null, "document_is_cancelled": true, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת חיוב - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/charges/{chargeId}` - **Operation ID:** `getMortgageFileCharge` - **Tags:** Charges מחזיר חיוב של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `chargeId` required - **In:** `path` מזהה החיוב `string`, format: `uuid` #### Responses ##### Status: 200 החיוב ###### Content-Type: application/json *Schema `MortgageCharge` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "item_name": "", "description": null, "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": null, "due_date_source": "manual", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1, "status": "pending", "notes": null, "external_document_id": null, "external_document_number": null, "external_document_type": null, "external_document_url": null, "external_provider": null, "document_is_cancelled": true, "created_at": "", "updated_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חיוב - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/charges/{chargeId}` - **Operation ID:** `updateMortgageFileCharge` - **Tags:** Charges עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. חיוב שהופק לו מסמך חיצוני (external_document_id) נעול לעריכה - 409. כלל הזוג של קישור אבן הדרך נבדק על התוצאה המשולבת (הערכים השמורים יחד עם הבקשה): אפשר לשנות את שניהם יחד, או לנתק את הקישור עם null בשניהם. עדכון due_date דרך ה-API מסמן אותו כידני (due_date_source=manual). amount (אם נשלח) חייב להיות מספר אי-שלילי (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `chargeId` required - **In:** `path` מזהה החיוב `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateMortgageCharge` — עדכון חלקי של חיוב. כלל הזוג של קישור אבן הדרך נבדק על התוצאה המשולבת (הערכים השמורים יחד עם הבקשה) - אחרת 400. - **`amount`** `number` — סכום - **`description`** `string` - **`due_date`** `string`, format: `date` — תאריך הגבייה (YYYY-MM-DD). עדכון דרך ה-API מסמן אותו כידני (due_date_source=manual) - **`includes_vat`** `boolean` — האם הסכום כולל מע"מ - **`is_ancillary_charge`** `boolean` — true = חיוב נלווה (למשל נסח טאבו או שליחויות); false = שכר טרחה - **`item_name`** `string` — שם הפריט - **`milestone_due_offset_days`** `integer` — כמה ימים אחרי ביצוע אבן הדרך ייקבע תאריך הגבייה (0 = יום הביצוע) - **`milestone_id`** `string | null` — מזהה אבן הדרך לקישור. null בשני שדות הקישור מנתק את הקישור - **`milestone_status_key`** `string | null` — מפתח הסטטוס של אבן הדרך. null בשני שדות הקישור מנתק את הקישור - **`notes`** `string` - **`status`** `string`, possible values: `"pending", "partial", "paid", "cancelled"` **Example:** ```json { "item_name": "", "description": "", "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": "", "status": "pending", "notes": "", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1 } ``` #### Responses ##### Status: 200 החיוב המעודכן ###### Content-Type: application/json *Schema `MortgageCharge` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "item_name": "", "description": null, "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": null, "due_date_source": "manual", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1, "status": "pending", "notes": null, "external_document_id": null, "external_document_number": null, "external_document_type": null, "external_document_url": null, "external_provider": null, "document_is_cancelled": true, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 לחיוב כבר הופק מסמך חיצוני (external_document_id) והוא נעול לעריכה ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Charge has an issued document", "details": "Cannot edit a charge after an external document was issued; cancel via the billing integration instead", "status": 409 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של חיוב - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/charges/{chargeId}` - **Operation ID:** `patchMortgageFileCharge` - **Tags:** Charges עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. חיוב שהופק לו מסמך חיצוני (external_document_id) נעול לעריכה - 409. כלל הזוג של קישור אבן הדרך נבדק על התוצאה המשולבת (הערכים השמורים יחד עם הבקשה): אפשר לשנות את שניהם יחד, או לנתק את הקישור עם null בשניהם. עדכון due_date דרך ה-API מסמן אותו כידני (due_date_source=manual). amount (אם נשלח) חייב להיות מספר אי-שלילי (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `chargeId` required - **In:** `path` מזהה החיוב `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateMortgageCharge` is shown above.* **Example:** ```json { "item_name": "", "description": "", "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": "", "status": "pending", "notes": "", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1 } ``` #### Responses ##### Status: 200 החיוב המעודכן ###### Content-Type: application/json *Schema `MortgageCharge` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "item_name": "", "description": null, "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": null, "due_date_source": "manual", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1, "status": "pending", "notes": null, "external_document_id": null, "external_document_number": null, "external_document_type": null, "external_document_url": null, "external_provider": null, "document_is_cancelled": true, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 לחיוב כבר הופק מסמך חיצוני (external_document_id) והוא נעול לעריכה ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Charge has an issued document", "details": "Cannot edit a charge after an external document was issued; cancel via the billing integration instead", "status": 409 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תשלומי התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/payments` - **Operation ID:** `getMortgageFilePayments` - **Tags:** Payments ממוין לפי payment_date מהחדש לישן. כברירת מחדל ללא תשלומים שבוטלו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `charge_id` - **In:** `query` סינון לפי חיוב `string`, format: `uuid` ##### `include_cancelled` - **In:** `query` true - לכלול גם תשלומים שבוטלו `boolean`, default: `false` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 תשלומי התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `MortgagePayment` — תשלום שהתקבל (mortgage_payments) - **`amount`** `number` - **`cancelled_at`** `string | null`, format: `date-time` - **`charge_id`** `string | null`, format: `uuid` - **`created_at`** `string`, format: `date-time` - **`external_document_id`** `string | null` — קיים → התשלום ננעל לעריכה - **`external_document_number`** `string | null` - **`external_document_url`** `string | null` - **`id`** `string`, format: `uuid` - **`is_cancelled`** `boolean` - **`mortgage_file_id`** `string`, format: `uuid` - **`notes`** `string | null` - **`organization_id`** `string`, format: `uuid` - **`payment_date`** `string`, format: `date` - **`payment_method`** `string | null` - **`payment_source`** `string` - **`receipt_number`** `string | null` - **`reference_number`** `string | null` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "charge_id": null, "amount": 1, "payment_date": "", "payment_source": "", "payment_method": null, "reference_number": null, "receipt_number": null, "notes": null, "is_cancelled": true, "cancelled_at": null, "external_document_id": null, "external_document_number": null, "external_document_url": null, "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### רישום תשלום - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/payments` - **Operation ID:** `createMortgageFilePayment` - **Tags:** Payments חובה: amount (מספר חיובי), payment_date (YYYY-MM-DD) ו-payment_source - אחרת 400. charge_id (אופציונלי) חייב להיות חיוב של אותו תיק - אחרת 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי התשלום **Required:** `true` ##### Content-Type: application/json schema: `CreateMortgagePayment` - **`amount` (required)** `number`, exclusiveMinimum: `0` — סכום התשלום (מספר חיובי) - **`payment_date` (required)** `string`, format: `date` - **`payment_source` (required)** `string` - **`charge_id`** `string`, format: `uuid` — אופציונלי - תשלום על חיוב מסוים - **`notes`** `string` - **`payment_method`** `string` - **`receipt_number`** `string` - **`reference_number`** `string` **Example:** ```json { "charge_id": "", "amount": 1, "payment_date": "", "payment_source": "", "payment_method": "", "reference_number": "", "receipt_number": "", "notes": "" } ``` #### Responses ##### Status: 201 התשלום נרשם ###### Content-Type: application/json *Schema `MortgagePayment` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "charge_id": null, "amount": 1, "payment_date": "", "payment_source": "", "payment_method": null, "reference_number": null, "receipt_number": null, "notes": null, "is_cancelled": true, "cancelled_at": null, "external_document_id": null, "external_document_number": null, "external_document_url": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תשלום - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/payments/{paymentId}` - **Operation ID:** `getMortgageFilePayment` - **Tags:** Payments מחזיר תשלום של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `paymentId` required - **In:** `path` מזהה התשלום `string`, format: `uuid` #### Responses ##### Status: 200 התשלום ###### Content-Type: application/json *Schema `MortgagePayment` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "charge_id": null, "amount": 1, "payment_date": "", "payment_source": "", "payment_method": null, "reference_number": null, "receipt_number": null, "notes": null, "is_cancelled": true, "cancelled_at": null, "external_document_id": null, "external_document_number": null, "external_document_url": null, "created_at": "", "updated_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון תשלום - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/payments/{paymentId}` - **Operation ID:** `updateMortgageFilePayment` - **Tags:** Payments עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. תשלום שבוטל, או שהופקה לו קבלה (external_document_id), נעול לעריכה - 409. amount (אם נשלח) חייב להיות מספר חיובי, ו-charge_id חייב להיות חיוב של אותו תיק (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `paymentId` required - **In:** `path` מזהה התשלום `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateMortgagePayment` - **`amount`** `number` — סכום התשלום - **`charge_id`** `string`, format: `uuid` — חיוב שהתשלום משויך אליו - **`notes`** `string` - **`payment_date`** `string`, format: `date` - **`payment_method`** `string` - **`payment_source`** `string` - **`receipt_number`** `string` - **`reference_number`** `string` **Example:** ```json { "charge_id": "", "amount": 1, "payment_date": "", "payment_source": "", "payment_method": "", "reference_number": "", "receipt_number": "", "notes": "" } ``` #### Responses ##### Status: 200 התשלום המעודכן ###### Content-Type: application/json *Schema `MortgagePayment` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "charge_id": null, "amount": 1, "payment_date": "", "payment_source": "", "payment_method": null, "reference_number": null, "receipt_number": null, "notes": null, "is_cancelled": true, "cancelled_at": null, "external_document_id": null, "external_document_number": null, "external_document_url": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 התשלום בוטל, או שהופקה לו קבלה (external_document_id), ולכן הוא נעול לעריכה ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Payment is cancelled", "details": "Cannot update a cancelled payment", "status": 409 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של תשלום - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/payments/{paymentId}` - **Operation ID:** `patchMortgageFilePayment` - **Tags:** Payments עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. תשלום שבוטל, או שהופקה לו קבלה (external_document_id), נעול לעריכה - 409. amount (אם נשלח) חייב להיות מספר חיובי, ו-charge_id חייב להיות חיוב של אותו תיק (אחרת 400). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `paymentId` required - **In:** `path` מזהה התשלום `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateMortgagePayment` is shown above.* **Example:** ```json { "charge_id": "", "amount": 1, "payment_date": "", "payment_source": "", "payment_method": "", "reference_number": "", "receipt_number": "", "notes": "" } ``` #### Responses ##### Status: 200 התשלום המעודכן ###### Content-Type: application/json *Schema `MortgagePayment` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "charge_id": null, "amount": 1, "payment_date": "", "payment_source": "", "payment_method": null, "reference_number": null, "receipt_number": null, "notes": null, "is_cancelled": true, "cancelled_at": null, "external_document_id": null, "external_document_number": null, "external_document_url": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 409 התשלום בוטל, או שהופקה לו קבלה (external_document_id), ולכן הוא נעול לעריכה ###### Content-Type: application/json *Schema `ErrorResponse` is shown above.* **Example: default** ```json { "error": "Payment is cancelled", "details": "Cannot update a cancelled payment", "status": 409 } ``` ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת ניתוחי התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/analysis` - **Operation ID:** `getMortgageFileAnalyses` - **Tags:** File analysis הניתוחים השמורים על התיק, מהחדש לישן. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 ניתוחי התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `MortgageAnalysis` — ניתוח שמור על תיק (mortgage_analysis) - **`analysis_data`** `object` — תוכן הניתוח (jsonb חופשי) - **`created_at`** `string`, format: `date-time` - **`id`** `string`, format: `uuid` - **`mortgage_file_id`** `string`, format: `uuid` - **`organization_id`** `string`, format: `uuid` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "analysis_data": {}, "created_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שמירת ניתוח - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/analysis` - **Operation ID:** `createMortgageFileAnalysis` - **Tags:** File analysis analysis_data חובה - אובייקט JSON חופשי (אחרת 400). ה-API אינו כולל עדכון או מחיקה של ניתוח. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`analysis_data` (required)** `object` — תוכן הניתוח (JSON חופשי) **Example: default** ```json { "analysis_data": { "summary": "Repayment-to-income ratio 31%", "max_monthly_payment": 8200 } } ``` #### Responses ##### Status: 201 הניתוח נשמר ###### Content-Type: application/json *Schema `MortgageAnalysis` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "analysis_data": {}, "created_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת ניתוח - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/analysis/{analysisId}` - **Operation ID:** `getMortgageFileAnalysis` - **Tags:** File analysis מחזיר ניתוח שמור של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `analysisId` required - **In:** `path` מזהה הניתוח `string`, format: `uuid` #### Responses ##### Status: 200 הניתוח ###### Content-Type: application/json *Schema `MortgageAnalysis` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "analysis_data": {}, "created_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תמהילי התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/calculator-mixes` - **Operation ID:** `getMortgageFileCalculatorMixes` - **Tags:** Calculator mixes התמהילים השמורים על התיק, ממוינים לפי עדכון אחרון (החדש קודם). #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `source` - **In:** `query` סינון לפי מקור התמהיל `string`, possible values: `"internal", "smartnpv"` ##### `search` - **In:** `query` חיפוש חלקי, ללא תלות ברישיות, בשם ובתיאור. התווים , ( ) % \_ \ " ' מוסרים מהביטוי לפני החיפוש. `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 תמהילי התיק ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `CalculatorMix` — תמהיל שמור מהמחשבון (calculator_mixes) - **`created_at`** `string`, format: `date-time` - **`data`** `object` — פירוט המסלולים (jsonb) - **`description`** `string | null` - **`id`** `string`, format: `uuid` - **`lead_id`** `string | null`, format: `uuid` - **`mortgage_file_id`** `string | null`, format: `uuid` - **`name`** `string` - **`organization_id`** `string`, format: `uuid` - **`source`** `string`, possible values: `"internal", "smartnpv"` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "name": "", "description": null, "data": {}, "source": "internal", "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת תמהיל - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/calculator-mixes` - **Operation ID:** `createMortgageFileCalculatorMix` - **Tags:** Calculator mixes name חובה (לא ריק) - אחרת 400. source: internal (ברירת מחדל) או smartnpv; ערך אחר מחזיר 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי התמהיל **Required:** `true` ##### Content-Type: application/json schema: `CreateCalculatorMix` - **`name` (required)** `string` - **`data`** `object` - **`description`** `string` - **`source`** `string`, possible values: `"internal", "smartnpv"`, default: `"internal"` **Example:** ```json { "name": "", "description": "", "data": {}, "source": "internal" } ``` #### Responses ##### Status: 201 התמהיל נוצר ###### Content-Type: application/json *Schema `CalculatorMix` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "name": "", "description": null, "data": {}, "source": "internal", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת תמהיל - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/calculator-mixes/{mixId}` - **Operation ID:** `getMortgageFileCalculatorMix` - **Tags:** Calculator mixes מחזיר תמהיל של התיק לפי מזהה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `mixId` required - **In:** `path` מזהה התמהיל `string`, format: `uuid` #### Responses ##### Status: 200 התמהיל ###### Content-Type: application/json *Schema `CalculatorMix` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "name": "", "description": null, "data": {}, "source": "internal", "created_at": "", "updated_at": "" } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון תמהיל - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/calculator-mixes/{mixId}` - **Operation ID:** `updateMortgageFileCalculatorMix` - **Tags:** Calculator mixes עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. source חייב להיות internal או smartnpv - אחרת 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `mixId` required - **In:** `path` מזהה התמהיל `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateCalculatorMix` - **`data`** `object` - **`description`** `string` - **`name`** `string` - **`source`** `string`, possible values: `"internal", "smartnpv"` **Example:** ```json { "name": "", "description": "", "data": {}, "source": "internal" } ``` #### Responses ##### Status: 200 התמהיל המעודכן ###### Content-Type: application/json *Schema `CalculatorMix` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "name": "", "description": null, "data": {}, "source": "internal", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של תמהיל - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/calculator-mixes/{mixId}` - **Operation ID:** `patchMortgageFileCalculatorMix` - **Tags:** Calculator mixes עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. source חייב להיות internal או smartnpv - אחרת 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `mixId` required - **In:** `path` מזהה התמהיל `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateCalculatorMix` is shown above.* **Example:** ```json { "name": "", "description": "", "data": {}, "source": "internal" } ``` #### Responses ##### Status: 200 התמהיל המעודכן ###### Content-Type: application/json *Schema `CalculatorMix` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "name": "", "description": null, "data": {}, "source": "internal", "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת השדות המותאמים של התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/custom-fields` - **Operation ID:** `getMortgageFileCustomFields` - **Tags:** Custom fields מחזיר את כל הגדרות השדות המותאמים הפעילות של הארגון לתיקי משכנתא (לפי display_order), כל אחת עם הערך הנוכחי בתיק (value, או null). ללא דפדוף. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 ההגדרות והערכים ###### Content-Type: application/json - **`count`** `integer` — מספר הפריטים במערך data - **`data`** `array` **Items:** schema: `CustomFieldWithValue` — הגדרת שדה מותאם + ערך לתיק הנוכחי - **`display_order`** `integer` - **`entity_type`** `string`, possible values: `"leads", "mortgage_files", "customers", "contacts"` - **`field_label`** `string` - **`field_name`** `string` - **`field_options`** `object | null` - **`field_type`** `string`, possible values: `"text", "number", "email", "tel", "url", "password", "textarea", "rich_text", "checkbox", "radio", "switch", "select", "date", "datetime", "time", "currency", "multi_select"` - **`id`** `string`, format: `uuid` — מזהה הגדרת השדה - **`is_required`** `boolean` - **`organization_id`** `string`, format: `uuid` - **`value`** `string | null` — הערך הנוכחי לתיק (null אם לא הוגדר) **Example:** ```json { "data": [ { "id": "", "organization_id": "", "entity_type": "leads", "field_name": "", "field_label": "", "field_type": "text", "field_options": null, "is_required": true, "display_order": 1, "value": null } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שמירת ערך לשדה מותאם - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/custom-fields/{customFieldId}` - **Operation ID:** `upsertMortgageFileCustomField` - **Tags:** Custom fields יוצר או מעדכן את ערך השדה בתיק (PUT ו-PATCH זהים). field_value חובה - אחרת 400. הגדרה שאינה קיימת בארגון - 404; הגדרה שאינה של תיקי משכנתא - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `customFieldId` required - **In:** `path` מזהה הגדרת השדה (id מתוך GET /custom-fields) `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`field_value` (required)** `string | null` — הערך לשמירה; null מנקה את הערך **Example: default** ```json { "field_value": "Example Bank" } ``` #### Responses ##### Status: 200 הערך שנשמר ###### Content-Type: application/json schema: `CustomFieldValue` — ערך שדה מותאם (custom_field_values) - **`created_at`** `string`, format: `date-time` - **`custom_field_id`** `string`, format: `uuid` - **`entity_id`** `string`, format: `uuid` - **`field_value`** `string | null` - **`id`** `string`, format: `uuid` - **`organization_id`** `string`, format: `uuid` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "id": "", "organization_id": "", "custom_field_id": "", "entity_id": "", "field_value": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שמירת ערך לשדה מותאם (PATCH) - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/custom-fields/{customFieldId}` - **Operation ID:** `patchMortgageFileCustomField` - **Tags:** Custom fields יוצר או מעדכן את ערך השדה בתיק (PUT ו-PATCH זהים). field_value חובה - אחרת 400. הגדרה שאינה קיימת בארגון - 404; הגדרה שאינה של תיקי משכנתא - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `customFieldId` required - **In:** `path` מזהה הגדרת השדה (id מתוך GET /custom-fields) `string`, format: `uuid` #### Request Body **Required:** `true` ##### Content-Type: application/json - **`field_value` (required)** `string | null` — הערך לשמירה; null מנקה את הערך **Example: default** ```json { "field_value": "Example Bank" } ``` #### Responses ##### Status: 200 הערך שנשמר ###### Content-Type: application/json *Schema `CustomFieldValue` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "custom_field_id": "", "entity_id": "", "field_value": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת אבני הדרך של התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/milestones` - **Operation ID:** `getMortgageFileMilestonesOverview` - **Tags:** Milestones מחזיר את **כל** אבני הדרך של התיק כפי שהן מוצגות באפליקציה: לכל סטטוס בתצורת הארגון - אבני הדרך שלו (של הארגון ואבני דרך מותאמות לתיק, is_custom=true), כל אחת עם שורת ההתקדמות (progress, או null) ופריטי הצ'קליסט שלה. בשונה מ-/milestones/progress, שמחזיר רק שורות התקדמות שכבר נוצרו, כאן ההגדרות זמינות גם בתיק חדש. מכל טבלה נשלפות עד 2,000 שורות; summary.truncated=true מסמן שהתוצאה נחתכה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 תצוגה משולבת ###### Content-Type: application/json schema: `MilestonesOverview` — תצוגה משולבת של אבני דרך לתיק (definitions + progress + checklists) - **`count`** `integer` — מספר הסטטוסים בתגובה - **`data`** `array` — סטטוסים מהארגון, כל אחד עם רשימת אבני הדרך שלו (מערכת + מותאמים) **Items:** - **`bgColor`** `string | null` - **`is_hidden`** `boolean` - **`is_locked`** `boolean` - **`key`** `string` — מזהה הסטטוס (setup, pending, וכו') - **`label`** `string | null` - **`milestones`** `array` **Items:** אבן דרך - מערכת או מותאמת (is_custom=true) - עם progress ו-checklist מקושרים - **`checklist`** `array` — פריטי checklist מקושרים ל-milestone הזה **Items:** `object` - **`description`** `string | null` - **`id`** `string` - **`is_custom`** `boolean` — true → מקור: custom_file_milestones; false → מקור: organization_settings - **`is_required`** `boolean` - **`label`** `string` - **`order`** `integer | null` - **`progress`** `object | null` — שורה מ-mortgage_milestone_progress (null אם לא נוצרה עדיין) - **`order`** `integer | null` - **`textColor`** `string | null` - **`summary`** `object` - **`hard_cap`** `integer` — מספר השורות המרבי שנשלף מכל טבלה (2000) - **`total_checklist_items`** `integer` - **`total_custom`** `integer` - **`total_milestones`** `integer` - **`total_progress_rows`** `integer` - **`truncated`** `boolean` — true אם אחת השליפות חרגה מתקרת hard_cap והתוצאה נחתכה **Example:** ```json { "data": [ { "key": "", "label": null, "bgColor": null, "textColor": null, "is_locked": true, "is_hidden": true, "order": null, "milestones": [ { "id": "", "label": "", "description": null, "order": null, "is_required": true, "is_custom": true, "progress": null, "checklist": [ {} ] } ] } ], "count": 1, "summary": { "total_milestones": 1, "total_custom": 1, "total_progress_rows": 1, "total_checklist_items": 1, "truncated": true, "hard_cap": 1 } } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת דרישות המסמכים של התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/required-documents` - **Operation ID:** `getMortgageFileRequiredDocuments` - **Tags:** Documents מחזיר את **כל** הגדרות דרישות המסמכים של הארגון (קטגוריות ומסמכים), כאשר כל מסמך מועשר בשורות הסטטוס שכבר נוצרו לו בתיק (פר לווה). בשונה מ-/document-statuses, שמחזיר רק שורות שכבר נוצרו, כאן ההגדרות זמינות גם בתיק שטרם נוצרו בו דרישות. ההגדרות אינן מסוננות לפי התנאים שלהן (סוג תעסוקה, מטרת הלוואה וכו') - הסינון באחריות הצרכן. נשלפות עד 2,000 שורות סטטוס; summary.truncated=true מסמן שהתוצאה נחתכה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 תצוגה משולבת ###### Content-Type: application/json schema: `RequiredDocumentsOverview` — תצוגה משולבת של מסמכי דרישה (definitions + statuses) - **`data`** `object` - **`categories`** `array` — קטגוריות מסמכים שהוגדרו בארגון **Items:** `object` **Additional properties:** any (true schema) - **`documents`** `array` — הגדרות מסמכים - כל מסמך מועשר ב-statuses\[] של שורות client_document_status שכבר נוצרו **Items:** - **`category_name`** `string | null` — מצורף לנוחות - שם הקטגוריה - **`categoryId`** `string` - **`conditions`** `array` **Items:** `object` - **`id`** `string` - **`isRequired`** `boolean` - **`name`** `string` - **`requirement`** `string`, possible values: `"per_borrower", "all_borrowers", "per_account_owner"` - **`statuses`** `array` — שורות מ-client_document_status (פר-לווה) למסמך הזה. ריק אם לא נוצרו עדיין. **Items:** *Schema `ClientDocumentStatus` is shown above.* **Additional properties:** any (true schema) - **`summary`** `object` - **`hard_cap`** `integer` — מספר השורות המרבי שנשלף מכל טבלה (2000) - **`total_categories`** `integer` - **`total_documents`** `integer` - **`total_status_rows`** `integer` - **`truncated`** `boolean` — true אם אחת השליפות חרגה מתקרת hard_cap והתוצאה נחתכה **Example:** ```json { "data": { "categories": [ { "additionalProperty": "anything" } ], "documents": [ { "id": "", "name": "", "categoryId": "", "category_name": null, "isRequired": true, "requirement": "per_borrower", "conditions": [ {} ], "statuses": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "document_type_id": "", "document_type_title": "", "status": "pending", "uploaded_document_id": null, "upload_progress": 0, "notes": {}, "hide_from_client": true, "created_at": "", "updated_at": "" } ], "additionalProperty": "anything" } ] }, "summary": { "total_categories": 1, "total_documents": 1, "total_status_rows": 1, "truncated": true, "hard_cap": 1 } } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת אבני הדרך המותאמות של התיק - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/milestones/custom` - **Operation ID:** `getMortgageFileCustomMilestones` - **Tags:** Milestones אבני דרך שנוספו לתיק הזה בלבד, ממוינות לפי custom_order, ללא דפדוף. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Responses ##### Status: 200 אבני הדרך המותאמות ###### Content-Type: application/json - **`count`** `integer` — מספר הפריטים במערך data - **`data`** `array` **Items:** schema: `CustomFileMilestone` — אבן דרך מותאמת לתיק (custom_file_milestones) - **`bg_color`** `string | null` - **`checklist_items`** `array | null` **Items:** `object` - **`created_at`** `string`, format: `date-time` - **`custom_order`** `integer | null` - **`description`** `string | null` - **`due_date_after_milestone_id`** `string | null` - **`due_date_specific`** `string | null`, format: `date-time` - **`due_date_type`** `string | null` — אופן חישוב תאריך היעד: none, days, hours, specific_date, days_after_milestone או days_before_required_date - **`due_date_value`** `integer | null` — מספר הימים/השעות לפי due_date_type - **`id`** `string`, format: `uuid` - **`is_required`** `boolean` - **`label`** `string` - **`linked_type`** `string | null` — מקור ההתקדמות של אבן הדרך: none, client_documents, client_signatures או checklist - **`mortgage_file_id`** `string`, format: `uuid` - **`organization_id`** `string`, format: `uuid` - **`status_key`** `string` - **`text_color`** `string | null` - **`updated_at`** `string | null`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "label": "", "description": null, "is_required": true, "bg_color": null, "text_color": null, "linked_type": null, "due_date_type": null, "due_date_value": null, "due_date_specific": null, "due_date_after_milestone_id": null, "custom_order": null, "checklist_items": [ {} ], "created_at": "", "updated_at": null } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### יצירת אבן דרך מותאמת - **Method:** `POST` - **Path:** `/api-service/mortgage-files/{id}/milestones/custom` - **Operation ID:** `createMortgageFileCustomMilestone` - **Tags:** Milestones מוסיף אבן דרך לתיק הזה בלבד. חובה: status_key (מפתח הסטטוס שאבן הדרך שייכת אליו) ו-label - אחרת 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` #### Request Body פרטי אבן הדרך **Required:** `true` ##### Content-Type: application/json schema: `CreateCustomFileMilestone` — נתונים ליצירת אבן דרך מותאמת. status_key ו-label חובה. - **`label` (required)** `string` - **`status_key` (required)** `string` — מפתח הסטטוס שאבן הדרך שייכת אליו - **`bg_color`** `string` - **`checklist_items`** `array` **Items:** `object` - **`custom_order`** `integer` - **`description`** `string` - **`due_date_after_milestone_id`** `string` - **`due_date_specific`** `string`, format: `date-time` - **`due_date_type`** `string` — אופן חישוב תאריך היעד: none, days, hours, specific_date, days_after_milestone או days_before_required_date - **`due_date_value`** `integer` — מספר הימים/השעות לפי due_date_type - **`is_required`** `boolean`, default: `false` - **`linked_type`** `string` — מקור ההתקדמות של אבן הדרך: none, client_documents, client_signatures או checklist - **`text_color`** `string` **Example: default** ```json { "status_key": "signing", "label": "Sign insurance documents", "linked_type": "none", "is_required": true } ``` #### Responses ##### Status: 201 אבן הדרך נוצרה ###### Content-Type: application/json *Schema `CustomFileMilestone` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "label": "", "description": null, "is_required": true, "bg_color": null, "text_color": null, "linked_type": null, "due_date_type": null, "due_date_value": null, "due_date_specific": null, "due_date_after_milestone_id": null, "custom_order": null, "checklist_items": [ {} ], "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון אבן דרך מותאמת - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/milestones/custom/{milestoneId}` - **Operation ID:** `updateMortgageFileCustomMilestone` - **Tags:** Milestones עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `milestoneId` required - **In:** `path` מזהה אבן הדרך המותאמת `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateCustomFileMilestone` — עדכון חלקי של אבן דרך מותאמת. - **`bg_color`** `string` - **`checklist_items`** `array` **Items:** `object` - **`custom_order`** `integer` - **`description`** `string` - **`due_date_after_milestone_id`** `string` - **`due_date_specific`** `string`, format: `date-time` - **`due_date_type`** `string` — אופן חישוב תאריך היעד: none, days, hours, specific_date, days_after_milestone או days_before_required_date - **`due_date_value`** `integer` — מספר הימים/השעות לפי due_date_type - **`is_required`** `boolean` - **`label`** `string` - **`linked_type`** `string` — מקור ההתקדמות של אבן הדרך: none, client_documents, client_signatures או checklist - **`status_key`** `string` — מפתח הסטטוס שאבן הדרך שייכת אליו - **`text_color`** `string` **Example:** ```json { "status_key": "", "label": "", "description": "", "is_required": true, "bg_color": "", "text_color": "", "linked_type": "", "due_date_type": "", "due_date_value": 1, "due_date_specific": "", "due_date_after_milestone_id": "", "custom_order": 1, "checklist_items": [ {} ] } ``` #### Responses ##### Status: 200 אבן הדרך המעודכנת ###### Content-Type: application/json *Schema `CustomFileMilestone` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "label": "", "description": null, "is_required": true, "bg_color": null, "text_color": null, "linked_type": null, "due_date_type": null, "due_date_value": null, "due_date_specific": null, "due_date_after_milestone_id": null, "custom_order": null, "checklist_items": [ {} ], "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של אבן דרך מותאמת - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/milestones/custom/{milestoneId}` - **Operation ID:** `patchMortgageFileCustomMilestone` - **Tags:** Milestones עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `milestoneId` required - **In:** `path` מזהה אבן הדרך המותאמת `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateCustomFileMilestone` is shown above.* **Example:** ```json { "status_key": "", "label": "", "description": "", "is_required": true, "bg_color": "", "text_color": "", "linked_type": "", "due_date_type": "", "due_date_value": 1, "due_date_specific": "", "due_date_after_milestone_id": "", "custom_order": 1, "checklist_items": [ {} ] } ``` #### Responses ##### Status: 200 אבן הדרך המעודכנת ###### Content-Type: application/json *Schema `CustomFileMilestone` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "label": "", "description": null, "is_required": true, "bg_color": null, "text_color": null, "linked_type": null, "due_date_type": null, "due_date_value": null, "due_date_specific": null, "due_date_after_milestone_id": null, "custom_order": null, "checklist_items": [ {} ], "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת התקדמות אבני הדרך - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/milestones/progress` - **Operation ID:** `getMortgageFileMilestoneProgress` - **Tags:** Milestones שורות ההתקדמות שכבר נוצרו בתיק, ממוינות לפי custom_order. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `status_key` - **In:** `query` סינון לפי מפתח סטטוס `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 שורות ההתקדמות ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `MilestoneProgress` — התקדמות באבן דרך (mortgage_milestone_progress) - **`carried_to_status_key`** `string | null` — אם ההתקדמות הועברה לסטטוס אחר - מפתח הסטטוס שאליו הועברה - **`completed_at`** `string | null`, format: `date-time` - **`completed_by`** `string | null`, format: `uuid` - **`completion_percentage`** `integer`, minimum: `0`, maximum: `100` - **`created_at`** `string`, format: `date-time` - **`custom_order`** `integer | null` - **`due_date`** `string | null`, format: `date-time` - **`due_date_override`** `string | null`, format: `date-time` - **`id`** `string`, format: `uuid` - **`is_completed`** `boolean` - **`milestone_id`** `string` - **`mortgage_file_id`** `string`, format: `uuid` - **`notes`** `string | null` - **`organization_id`** `string`, format: `uuid` - **`status_key`** `string` - **`updated_at`** `string | null`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "milestone_id": "", "is_completed": true, "completion_percentage": 0, "completed_at": null, "completed_by": null, "due_date": null, "due_date_override": null, "notes": null, "custom_order": null, "carried_to_status_key": null, "created_at": "", "updated_at": null } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון התקדמות אבן דרך - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/milestones/progress/{progressId}` - **Operation ID:** `updateMortgageFileMilestoneProgress` - **Tags:** Milestones עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. is_completed=true מסמן את completed_at ומציב completion_percentage=100 (אם לא נשלח ערך אחר); is_completed=false מאפס את completed_at. ביצוע אבן דרך עשוי לקבוע את due_date של חיובים שמקושרים אליה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `progressId` required - **In:** `path` מזהה שורת ההתקדמות `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateMilestoneProgress` - **`completion_percentage`** `integer`, minimum: `0`, maximum: `100` - **`custom_order`** `integer` - **`due_date_override`** `string`, format: `date-time` - **`is_completed`** `boolean` - **`notes`** `string` **Example: default** ```json { "is_completed": true } ``` #### Responses ##### Status: 200 שורת ההתקדמות המעודכנת ###### Content-Type: application/json *Schema `MilestoneProgress` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "milestone_id": "", "is_completed": true, "completion_percentage": 0, "completed_at": null, "completed_by": null, "due_date": null, "due_date_override": null, "notes": null, "custom_order": null, "carried_to_status_key": null, "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של התקדמות אבן דרך - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/milestones/progress/{progressId}` - **Operation ID:** `patchMortgageFileMilestoneProgress` - **Tags:** Milestones עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. is_completed=true מסמן את completed_at ומציב completion_percentage=100 (אם לא נשלח ערך אחר); is_completed=false מאפס את completed_at. ביצוע אבן דרך עשוי לקבוע את due_date של חיובים שמקושרים אליה. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `progressId` required - **In:** `path` מזהה שורת ההתקדמות `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateMilestoneProgress` is shown above.* **Example: default** ```json { "is_completed": true } ``` #### Responses ##### Status: 200 שורת ההתקדמות המעודכנת ###### Content-Type: application/json *Schema `MilestoneProgress` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "milestone_id": "", "is_completed": true, "completion_percentage": 0, "completed_at": null, "completed_by": null, "due_date": null, "due_date_override": null, "notes": null, "custom_order": null, "carried_to_status_key": null, "created_at": "", "updated_at": null } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### שליפת פריטי הצ'קליסט של אבני הדרך - **Method:** `GET` - **Path:** `/api-service/mortgage-files/{id}/milestones/checklist` - **Operation ID:** `getMortgageFileMilestoneChecklist` - **Tags:** Milestones פריטי הצ'קליסט של אבני הדרך בתיק, ממוינים לפי sort_order. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `milestone_id` - **In:** `query` סינון לפי מזהה אבן דרך `string` ##### `limit` - **In:** `query` מספר התוצאות המרבי בעמוד. ברירת מחדל 50, מקסימום 500 (ערך גבוה יותר נחתך ל-500). ערך לא תקין (לא מספר, אפס או שלילי) מוחלף בשקט בברירת המחדל. `integer`, default: `50`, minimum: `1`, maximum: `500` ##### `offset` - **In:** `query` מספר התוצאות לדלג עליהן (לדפדוף). ברירת מחדל 0, מקסימום 1,000,000. ערך לא תקין מוחלף ב-0. `integer`, default: `0`, minimum: `0`, maximum: `1000000` #### Responses ##### Status: 200 פריטי הצ'קליסט ###### Content-Type: application/json - **`count`** `integer` — מספר הרשומות הכולל שתואמות לסינון (לא רק בעמוד הנוכחי) - **`data`** `array` **Items:** schema: `MilestoneChecklistItem` — פריט checklist באבן דרך - **`completed_at`** `string | null`, format: `date-time` - **`completed_by`** `string | null`, format: `uuid` - **`created_at`** `string`, format: `date-time` - **`id`** `string`, format: `uuid` - **`is_completed`** `boolean` - **`label`** `string` - **`milestone_id`** `string` - **`mortgage_file_id`** `string`, format: `uuid` - **`organization_id`** `string`, format: `uuid` - **`sort_order`** `integer` - **`status_key`** `string | null` - **`template_item_id`** `string | null` - **`updated_at`** `string`, format: `date-time` **Example:** ```json { "data": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "milestone_id": "", "status_key": null, "template_item_id": null, "label": "", "sort_order": 1, "is_completed": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "" } ], "count": 1 } ``` ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון פריט צ'קליסט - **Method:** `PUT` - **Path:** `/api-service/mortgage-files/{id}/milestones/checklist/{itemId}` - **Operation ID:** `updateMortgageFileMilestoneChecklistItem` - **Tags:** Milestones עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. ניתן לעדכן label, sort_order ו-is_completed. is_completed=true מסמן את completed_at; false מאפס אותו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `itemId` required - **In:** `path` מזהה פריט הצ'קליסט `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json schema: `UpdateMilestoneChecklistItem` - **`is_completed`** `boolean` - **`label`** `string` - **`sort_order`** `integer` **Example: default** ```json { "is_completed": true } ``` #### Responses ##### Status: 200 הפריט המעודכן ###### Content-Type: application/json *Schema `MilestoneChecklistItem` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "milestone_id": "", "status_key": null, "template_item_id": null, "label": "", "sort_order": 1, "is_completed": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ### עדכון חלקי של פריט צ'קליסט - **Method:** `PATCH` - **Path:** `/api-service/mortgage-files/{id}/milestones/checklist/{itemId}` - **Operation ID:** `patchMortgageFileMilestoneChecklistItem` - **Tags:** Milestones עדכון חלקי: רק השדות שנשלחו מתעדכנים (PUT ו-PATCH זהים). אם לא נשלח אף שדה שניתן לעדכן - 400. ניתן לעדכן label, sort_order ו-is_completed. is_completed=true מסמן את completed_at; false מאפס אותו. #### Effective servers - `https://app.banta.co.il` פרודקשן #### Authentication - **ApiKeyAuth** ``` { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key in the `x-api-key` header (see the Authentication guide)." } ``` API key in the `x-api-key` header (see the Authentication guide). #### Parameters ##### `id` required - **In:** `path` מזהה תיק המשכנתא `string`, format: `uuid` ##### `itemId` required - **In:** `path` מזהה פריט הצ'קליסט `string`, format: `uuid` #### Request Body השדות לעדכון **Required:** `true` ##### Content-Type: application/json *Schema `UpdateMilestoneChecklistItem` is shown above.* **Example: default** ```json { "is_completed": true } ``` #### Responses ##### Status: 200 הפריט המעודכן ###### Content-Type: application/json *Schema `MilestoneChecklistItem` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "milestone_id": "", "status_key": null, "template_item_id": null, "label": "", "sort_order": 1, "is_completed": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "" } ``` ##### Status: 400 בקשה לא תקינה: גוף הבקשה אינו JSON תקין או אינו אובייקט, שדה חובה חסר או ריק, ערך לא תקין, או עדכון שלא כולל אף שדה שניתן לעדכן ("No updatable fields provided"). המקרים הספציפיים מפורטים בתיאור כל פעולה. גם שגיאות אימות של מסד הנתונים מוחזרות כ-400 עם השדה code: 22P02 (ערך בפורמט לא תקין, כגון ערך enum לא מוכר או UUID שגוי), 23514 (ערך שאינו מותר, כגון סטטוס שלא הוגדר בארגון) או 23503 (הפניה לרשומה שלא קיימת). ##### Status: 401 מפתח ה-API חסר או לא תקין. השדה reason מציין את הסיבה: missing_api_key (לא נשלחה כותרת x-api-key), malformed_api_key (המפתח מכיל רווחים), invalid_api_key (מפתח לא קיים, מבוטל או שפג תוקפו), auth_service_error (תקלה בשירות האימות - אפשר לנסות שוב). ##### Status: 403 למפתח אין הרשאה לפעולה הזו על המשאב (resource:action), למשל write על leads. ראו את סכמת האבטחה ApiKeyAuth. ##### Status: 404 הרשומה לא נמצאה בארגון של המפתח, או שנמחקה. בנתיבים תחת /mortgage-files/{id}/... מוחזר 404 גם כאשר תיק המשכנתא עצמו לא נמצא. ##### Status: 429 חריגה ממגבלת הקצב: 60 בקשות לכל מפתח API בחלון קבוע של 60 שניות. החלון נפתח בבקשה הראשונה ומתאפס 60 שניות אחריה, וכל בקשה עם מפתח תקין נספרת - גם בקשות שנדחו. retry_after מציין את מועד איפוס החלון. ##### Status: 500 שגיאת שרת או שגיאת מסד נתונים. כשבטוח לחשוף, השדה code מכיל את קוד השגיאה של PostgREST/Postgres, למשל 23502 (חסר ערך בשדה חובה). שגיאות שנגרמות מקלט לא תקין (22P02, 23503, 23514) מוחזרות כ-400, וערך כפול (23505) כ-409. ## Schemas ### Borrower - **Type:** `object` לווה בתיק משכנתא: רשומת השיוך לתיק (סוג קשר, סדר, סוג לווה) יחד עם פרטי הלקוח המקושר. פרטי הלקוח (שם, זיהוי, פרטי קשר וכו') שמורים ברשומת הלקוח ומשותפים לכל התיקים שבהם הוא לווה. *Schema `Borrower` is shown above.* **Example:** ```json { "id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "spouse_of_borrower_id": "", "customer_id": "", "order_index": 1, "mortgage_file_id": "", "organization_id": "", "created_at": "", "updated_at": "" } ``` ### Lead - **Type:** `object` ליד - פנייה של לקוח פוטנציאלי. התגובה עשויה לכלול עמודות נוספות שאינן מתועדות כאן. *Schema `Lead` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "lead_number": "", "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "new", "status_custom": null, "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null, "team_id": "", "borrowers_data": [ { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ], "mortgage_request_data": { "property_type": "", "property_value": 1, "property_location": "", "loan_purpose": "" }, "financial_data": { "monthly_income": 1, "existing_obligations": 1, "savings": 1 }, "additional_details": { "additionalProperty": "anything" }, "custom_fields_leads": { "additionalProperty": "anything" }, "converted_to_customer": "", "converted_to_mortgage_file_id": "", "utm_source": "", "utm_medium": "", "utm_campaign": "", "utm_term": "", "utm_content": "", "referrer_url": "", "landing_path": "", "status_changed_at": "", "first_response_time": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ### LeadBorrower - **Type:** `object` נתוני לווה פוטנציאלי בליד *Schema `LeadBorrower` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "id_number": "", "phone": "", "email": "", "birth_date": "", "relationship_type": "main", "marital_status": "single", "employment_type": "", "monthly_income": 1 } ``` ### CreateLead - **Type:** `object` נתונים ליצירת ליד. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `CreateLead` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "email": "", "phone": "", "source": "api", "status": "new", "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": false, "assigned_to": "" } ``` ### MortgagePurpose - **Type:** `object` מטרת משכנתא (רכישה, מחזור, שיפוץ וכו') *Schema `MortgagePurpose` is shown above.* **Example:** ```json { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ``` ### MortgageFile - **Type:** `object` תיק משכנתא (רשומת התיק). התגובה עשויה לכלול עמודות פנימיות נוספות שאינן מתועדות כאן. *Schema `MortgageFile` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ``` ### FinancingEntity - **Type:** `object` פרטי גוף מממן (בנק) *Schema `FinancingEntity` is shown above.* **Example:** ```json { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" } ``` ### MortgageAdditionalInfo - **Type:** `object` מידע נוסף על תיק משכנתא *Schema `MortgageAdditionalInfo` is shown above.* **Example:** ```json { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } } ``` ### AdditionalExpense - **Type:** `object` הוצאה נלווית לעסקה *Schema `AdditionalExpense` is shown above.* **Example:** ```json { "type": "", "amount": 1, "description": "" } ``` ### BorrowerIncome - **Type:** `object` נתוני הכנסות של לווה *Schema `BorrowerIncome` is shown above.* **Example:** ```json { "borrowerId": "", "borrowerName": "", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ { "date": "", "amount": "" } ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ] } ``` ### EmploymentItem - **Type:** `object` פריט תעסוקה/הכנסה *Schema `EmploymentItem` is shown above.* **Example:** ```json { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ { "date": "", "amount": "" } ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ``` ### Incomes - **Type:** `object` נתוני הכנסות לתיק משכנתא *Schema `Incomes` is shown above.* **Example:** ```json { "borrowers": [ { "borrowerId": "", "borrowerName": "", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ { "date": "", "amount": "" } ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ] } ] } ``` ### BankAccount - **Type:** `object` חשבון בנק *Schema `BankAccount` is shown above.* **Example:** ```json { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ``` ### Obligation - **Type:** `object` התחייבות פיננסית *Schema `Obligation` is shown above.* **Example:** ```json { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ``` ### CreateMortgageFile - **Type:** `object` נתונים ליצירת תיק משכנתא. אין שדות חובה. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `CreateMortgageFile` is shown above.* **Example:** ```json { "file_number": "", "title": "", "status": "new", "status_comment": "", "customer_id": "", "assigned_to": "", "borrowers": [ { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "order_index": 1, "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "customer_id": "" } ], "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "lead_id": "", "source_lead_id": "", "source_lead_number": "", "incomes": { "borrowers": [ { "borrowerId": "", "borrowerName": "", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ {} ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ] } ] }, "bank_accounts": [ { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ], "obligations": [ { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ] } ``` ### CreateBorrower - **Type:** `object` נתונים להוספת לווה לתיק. שדות הלקוח (שם, זיהוי, פרטי קשר וכו') נשמרים ברשומת הלקוח, ורק כאשר נשלח id_number - ראו תיאור הפעולה POST /mortgage-files/{id}/borrowers. *Schema `CreateBorrower` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "order_index": 1, "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "preferred_contact_methods": [ "email" ], "customer_id": "" } ``` ### UpdateMortgageStatus - **Type:** `object` *Schema `UpdateMortgageStatus` is shown above.* **Example:** ```json { "status": "", "notes": "" } ``` ### Customer - **Type:** `object` לקוח בארגון. התגובה עשויה לכלול עמודות נוספות שאינן מתועדות כאן. *Schema `Customer` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "created_at": "", "updated_at": "", "mortgage_files": [ { "id": "", "organization_id": "", "file_number": "", "title": "", "status": "", "status_comment": "", "status_changed_at": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "source_lead_id": "", "source_lead_number": "", "lead_id": "", "drive_folder_url": "", "created_at": "", "updated_at": "", "created_by": "" } ] } ``` ### CreateCustomer - **Type:** `object` נתונים ליצירת לקוח. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `CreateCustomer` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true } ``` ### ErrorResponse - **Type:** `object` מבנה אחיד לכל תגובות השגיאה. בנוסף לשדות הקבועים error ו-status, חלק מהשגיאות מוסיפות שדות הקשר - למשל validation, existing_customer_id, related_files_count, related_mortgages_count, existing_link_id, existing_id, provided_type או available_lists. *Schema `ErrorResponse` is shown above.* **Example:** ```json { "error": "", "details": "", "status": 1, "reason": "missing_api_key", "retry_after": "", "code": "", "validation": { "additionalProperty": "" }, "additionalProperty": "anything" } ``` ### TimelineEvent - **Type:** `object` אירוע ציר-זמן (יצירת תיק, שינוי סטטוס, וכו') *Schema `TimelineEvent` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "event_type": "", "title": "", "description": null, "metadata": {}, "created_by": null, "created_at": "" } ``` ### Task - **Type:** `object` משימה. יכולה להיות מקושרת לתיק משכנתא, ליד, לקוח - או standalone (כל ה-\*\_id יכולים להיות null). התגובה כוללת objects של הישות המקושרת (`mortgage_file`/`lead`/`customer`) אם קיימת. *Schema `Task` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "customer_id": null, "title": "", "description": null, "status": "open", "priority": "low", "due_date": null, "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "", "mortgage_file": { "id": "", "file_number": null, "title": null, "status": null }, "lead": { "id": "", "first_name": null, "last_name": null, "phone": null, "status": null }, "customer": { "id": "", "first_name": null, "last_name": null, "id_number": null } } ``` ### CreateTask - **Type:** `object` נתונים ליצירת משימה. אפשר לקשר את המשימה לתיק, ליד ו/או לקוח, או להשאיר את שלושת המזהים ריקים ליצירת משימה עצמאית. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `CreateTask` is shown above.* **Example:** ```json { "title": "", "description": "", "due_date": "", "status": "open", "priority": "medium", "assigned_to": "", "parent_task_id": "", "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` ### UpdateTask - **Type:** `object` עדכון חלקי של משימה: רק השדות שנשלחו מתעדכנים. החלפה או ניתוק (null) של הישות המקושרת אפשריים רק ב-PUT/PATCH /tasks/{taskId}; בנתיב /mortgage-files/{id}/tasks/{taskId} מתעלמים מהם. *Schema `UpdateTask` is shown above.* **Example:** ```json { "title": "", "description": "", "due_date": null, "status": "open", "priority": "low", "assigned_to": null, "parent_task_id": null, "progress": 0, "is_favorite": true, "mortgage_file_id": null, "lead_id": null, "customer_id": null } ``` ### Note - **Type:** `object` הערה על תיק משכנתא (entity_notes) *Schema `Note` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": null, "content": "", "is_pinned": true, "is_locked": true, "is_completed": true, "completed_at": null, "created_at": "", "updated_at": null } ``` ### CreateNote - **Type:** `object` נתונים ליצירת הערה. content חובה. *Schema `CreateNote` is shown above.* **Example:** ```json { "content": "", "title": "", "is_pinned": false, "is_locked": false, "is_completed": false } ``` ### UpdateNote - **Type:** `object` *Schema `UpdateNote` is shown above.* **Example:** ```json { "title": "", "content": "", "is_pinned": true, "is_locked": true, "is_completed": true } ``` ### MortgageContactLink - **Type:** `object` קישור איש-קשר לתיק (mortgage_contacts) *Schema `MortgageContactLink` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "contact_id": "", "notes": null, "contact": { "id": "", "first_name": "", "last_name": "", "type": "", "custom_type": null, "email": null, "phone": null, "company": null, "job_title": null }, "created_at": "", "updated_at": "" } ``` ### Watcher - **Type:** `object` משתמש העוקב אחר תיק (mortgage_file_watchers). הערה: `email` לא זמין דרך ה-API החיצוני (האימייל יושב ב-auth.users, נפרד מ-profiles). *Schema `Watcher` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "watcher_id": "", "watcher": { "id": "", "first_name": "", "last_name": "" }, "created_at": "" } ``` ### ClientDocument - **Type:** `object` מסמך לקוח (מטא-דאטה; תוכן ב-Supabase Storage) *Schema `ClientDocument` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "original_name": "", "stored_name": "", "file_path": "", "file_size": null, "file_type": null, "category": null, "needs_signature": true, "uploaded_by_type": "borrower", "uploaded_by_id": null, "drive_folder_id": null, "drive_file_id": null, "created_at": "" } ``` ### DocumentSignature - **Type:** `object` חתימה על מסמך *Schema `DocumentSignature` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "document_id": "", "borrower_id": "", "is_signed": true, "signed_at": null, "signature_date": null, "document": { "id": "", "original_name": "", "mortgage_file_id": "", "borrower_id": null, "file_path": "" }, "created_at": "" } ``` ### GeneratedDocument - **Type:** `object` מסמך שיוצר מתבנית (generated_documents) *Schema `GeneratedDocument` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "template_id": null, "entity_type": "mortgage_file", "entity_id": "", "document_name": "", "filled_content": null, "filled_variables": {}, "signatures": [ {} ], "pdf_path": null, "status": "", "created_at": "", "updated_at": "" } ``` ### ClientDocumentStatus - **Type:** `object` סטטוס מסמך נדרש פר-לווה *Schema `ClientDocumentStatus` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "document_type_id": "", "document_type_title": "", "status": "pending", "uploaded_document_id": null, "upload_progress": 0, "notes": {}, "hide_from_client": true, "created_at": "", "updated_at": "" } ``` ### Reminder - **Type:** `object` תזכורת על תיק (reminders) *Schema `Reminder` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "mortgage_file", "entity_id": "", "title": "", "description": null, "remind_at": "", "channels": [ "notification", "email" ], "metadata": {}, "recipient_user_id": null, "is_sent": true, "sent_at": null, "is_dismissed": true, "dismissed_at": null, "created_at": "", "updated_at": "" } ``` ### CreateReminder - **Type:** `object` *Schema `CreateReminder` is shown above.* **Example:** ```json { "title": "", "description": "", "remind_at": "", "channels": [ "" ], "metadata": {}, "recipient_user_id": "" } ``` ### UpdateReminder - **Type:** `object` *Schema `UpdateReminder` is shown above.* **Example:** ```json { "title": "", "description": "", "remind_at": "", "channels": [ "" ], "metadata": {}, "recipient_user_id": "", "is_dismissed": true } ``` ### MortgageCharge - **Type:** `object` חיוב (דרישת תשלום) על תיק. התגובה עשויה לכלול עמודות נוספות של אינטגרציית הסליקה שאינן מתועדות כאן. *Schema `MortgageCharge` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "item_name": "", "description": null, "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": null, "due_date_source": "manual", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1, "status": "pending", "notes": null, "external_document_id": null, "external_document_number": null, "external_document_type": null, "external_document_url": null, "external_provider": null, "document_is_cancelled": true, "created_at": "", "updated_at": "" } ``` ### CreateMortgageCharge - **Type:** `object` נתונים ליצירת חיוב. milestone_id ו-milestone_status_key נשלחים יחד או לא נשלחים כלל - אחרת 400. *Schema `CreateMortgageCharge` is shown above.* **Example:** ```json { "item_name": "", "description": "", "amount": 0, "includes_vat": true, "is_ancillary_charge": false, "due_date": "", "status": "pending", "notes": "", "milestone_id": "", "milestone_status_key": "", "milestone_due_offset_days": 0 } ``` ### UpdateMortgageCharge - **Type:** `object` עדכון חלקי של חיוב. כלל הזוג של קישור אבן הדרך נבדק על התוצאה המשולבת (הערכים השמורים יחד עם הבקשה) - אחרת 400. *Schema `UpdateMortgageCharge` is shown above.* **Example:** ```json { "item_name": "", "description": "", "amount": 1, "includes_vat": true, "is_ancillary_charge": true, "due_date": "", "status": "pending", "notes": "", "milestone_id": null, "milestone_status_key": null, "milestone_due_offset_days": 1 } ``` ### MortgagePayment - **Type:** `object` תשלום שהתקבל (mortgage_payments) *Schema `MortgagePayment` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "charge_id": null, "amount": 1, "payment_date": "", "payment_source": "", "payment_method": null, "reference_number": null, "receipt_number": null, "notes": null, "is_cancelled": true, "cancelled_at": null, "external_document_id": null, "external_document_number": null, "external_document_url": null, "created_at": "", "updated_at": "" } ``` ### CreateMortgagePayment - **Type:** `object` *Schema `CreateMortgagePayment` is shown above.* **Example:** ```json { "charge_id": "", "amount": 1, "payment_date": "", "payment_source": "", "payment_method": "", "reference_number": "", "receipt_number": "", "notes": "" } ``` ### UpdateMortgagePayment - **Type:** `object` *Schema `UpdateMortgagePayment` is shown above.* **Example:** ```json { "charge_id": "", "amount": 1, "payment_date": "", "payment_source": "", "payment_method": "", "reference_number": "", "receipt_number": "", "notes": "" } ``` ### MortgageAnalysis - **Type:** `object` ניתוח שמור על תיק (mortgage_analysis) *Schema `MortgageAnalysis` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "analysis_data": {}, "created_at": "" } ``` ### CalculatorMix - **Type:** `object` תמהיל שמור מהמחשבון (calculator_mixes) *Schema `CalculatorMix` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": null, "lead_id": null, "name": "", "description": null, "data": {}, "source": "internal", "created_at": "", "updated_at": "" } ``` ### CreateCalculatorMix - **Type:** `object` *Schema `CreateCalculatorMix` is shown above.* **Example:** ```json { "name": "", "description": "", "data": {}, "source": "internal" } ``` ### UpdateCalculatorMix - **Type:** `object` *Schema `UpdateCalculatorMix` is shown above.* **Example:** ```json { "name": "", "description": "", "data": {}, "source": "internal" } ``` ### CustomFieldWithValue - **Type:** `object` הגדרת שדה מותאם + ערך לתיק הנוכחי *Schema `CustomFieldWithValue` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "entity_type": "leads", "field_name": "", "field_label": "", "field_type": "text", "field_options": null, "is_required": true, "display_order": 1, "value": null } ``` ### CustomFieldValue - **Type:** `object` ערך שדה מותאם (custom_field_values) *Schema `CustomFieldValue` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "custom_field_id": "", "entity_id": "", "field_value": null, "created_at": "", "updated_at": "" } ``` ### CustomFileMilestone - **Type:** `object` אבן דרך מותאמת לתיק (custom_file_milestones) *Schema `CustomFileMilestone` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "label": "", "description": null, "is_required": true, "bg_color": null, "text_color": null, "linked_type": null, "due_date_type": null, "due_date_value": null, "due_date_specific": null, "due_date_after_milestone_id": null, "custom_order": null, "checklist_items": [ {} ], "created_at": "", "updated_at": null } ``` ### CreateCustomFileMilestone - **Type:** `object` נתונים ליצירת אבן דרך מותאמת. status_key ו-label חובה. *Schema `CreateCustomFileMilestone` is shown above.* **Example:** ```json { "status_key": "", "label": "", "description": "", "is_required": false, "bg_color": "", "text_color": "", "linked_type": "", "due_date_type": "", "due_date_value": 1, "due_date_specific": "", "due_date_after_milestone_id": "", "custom_order": 1, "checklist_items": [ {} ] } ``` ### UpdateCustomFileMilestone - **Type:** `object` עדכון חלקי של אבן דרך מותאמת. *Schema `UpdateCustomFileMilestone` is shown above.* **Example:** ```json { "status_key": "", "label": "", "description": "", "is_required": true, "bg_color": "", "text_color": "", "linked_type": "", "due_date_type": "", "due_date_value": 1, "due_date_specific": "", "due_date_after_milestone_id": "", "custom_order": 1, "checklist_items": [ {} ] } ``` ### MilestoneProgress - **Type:** `object` התקדמות באבן דרך (mortgage_milestone_progress) *Schema `MilestoneProgress` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "status_key": "", "milestone_id": "", "is_completed": true, "completion_percentage": 0, "completed_at": null, "completed_by": null, "due_date": null, "due_date_override": null, "notes": null, "custom_order": null, "carried_to_status_key": null, "created_at": "", "updated_at": null } ``` ### UpdateMilestoneProgress - **Type:** `object` *Schema `UpdateMilestoneProgress` is shown above.* **Example:** ```json { "is_completed": true, "completion_percentage": 0, "due_date_override": "", "notes": "", "custom_order": 1 } ``` ### MilestoneChecklistItem - **Type:** `object` פריט checklist באבן דרך *Schema `MilestoneChecklistItem` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "milestone_id": "", "status_key": null, "template_item_id": null, "label": "", "sort_order": 1, "is_completed": true, "completed_at": null, "completed_by": null, "created_at": "", "updated_at": "" } ``` ### UpdateMilestoneChecklistItem - **Type:** `object` *Schema `UpdateMilestoneChecklistItem` is shown above.* **Example:** ```json { "label": "", "sort_order": 1, "is_completed": true } ``` ### MilestonesOverview - **Type:** `object` תצוגה משולבת של אבני דרך לתיק (definitions + progress + checklists) *Schema `MilestonesOverview` is shown above.* **Example:** ```json { "data": [ { "key": "", "label": null, "bgColor": null, "textColor": null, "is_locked": true, "is_hidden": true, "order": null, "milestones": [ { "id": "", "label": "", "description": null, "order": null, "is_required": true, "is_custom": true, "progress": null, "checklist": [ {} ] } ] } ], "count": 1, "summary": { "total_milestones": 1, "total_custom": 1, "total_progress_rows": 1, "total_checklist_items": 1, "truncated": true, "hard_cap": 1 } } ``` ### RequiredDocumentsOverview - **Type:** `object` תצוגה משולבת של מסמכי דרישה (definitions + statuses) *Schema `RequiredDocumentsOverview` is shown above.* **Example:** ```json { "data": { "categories": [ { "additionalProperty": "anything" } ], "documents": [ { "id": "", "name": "", "categoryId": "", "category_name": null, "isRequired": true, "requirement": "per_borrower", "conditions": [ {} ], "statuses": [ { "id": "", "organization_id": "", "mortgage_file_id": "", "borrower_id": null, "document_type_id": "", "document_type_title": "", "status": "pending", "uploaded_document_id": null, "upload_progress": 0, "notes": {}, "hide_from_client": true, "created_at": "", "updated_at": "" } ], "additionalProperty": "anything" } ] }, "summary": { "total_categories": 1, "total_documents": 1, "total_status_rows": 1, "truncated": true, "hard_cap": 1 } } ``` ### ListItem - **Type:** `object` פריט ברשימה בסיסית *Schema `ListItem` is shown above.* **Example:** ```json { "key": "", "label": "" } ``` ### StatusListItem - **Type:** `object` פריט ברשימת סטטוסים עם צבעים *Schema `StatusListItem` is shown above.* **Example:** ```json { "key": "", "label": "", "bgColor": "", "textColor": "" } ``` ### CalendarEventTypeItem - **Type:** `object` סוג אירוע יומן *Schema `CalendarEventTypeItem` is shown above.* **Example:** ```json { "code": "", "name": "", "nameEn": "", "color": "", "icon": "", "sortOrder": 1, "showInCalendar": true, "allowSync": true } ``` ### ListResponse - **Type:** `object` תגובת רשימה בסיסית *Schema `ListResponse` is shown above.* **Example:** ```json { "data": [ { "key": "", "label": "" } ], "count": 1, "list_type": "" } ``` ### StatusListResponse - **Type:** `object` תגובת רשימת סטטוסים *Schema `StatusListResponse` is shown above.* **Example:** ```json { "data": [ { "key": "", "label": "", "bgColor": "", "textColor": "" } ], "count": 1, "list_type": "" } ``` ### CalendarEventTypeListResponse - **Type:** `object` תגובת רשימת סוגי אירועי יומן *Schema `CalendarEventTypeListResponse` is shown above.* **Example:** ```json { "data": [ { "code": "", "name": "", "nameEn": "", "color": "", "icon": "", "sortOrder": 1, "showInCalendar": true, "allowSync": true } ], "count": 1, "list_type": "" } ``` ### LeadStatus - **Type:** `object` סטטוס ליד - כולל סטטוסים מותאמים אישית של הארגון *Schema `LeadStatus` is shown above.* **Example:** ```json { "value": "", "label": "", "color": { "bg": "", "text": "" }, "is_default": true } ``` ### MortgageStatus - **Type:** `object` סטטוס תיק משכנתא - כולל סטטוסים מותאמים אישית של הארגון *Schema `MortgageStatus` is shown above.* **Example:** ```json { "key": "", "label": "", "bgColor": "", "textColor": "", "is_system": true, "is_hidden": true, "order": 1 } ``` ### Contact - **Type:** `object` איש קשר בארגון (בנקאי, עו"ד, שמאי וכד') *Schema `Contact` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": null, "notes": "", "created_at": "", "updated_at": "" } ``` ### CreateContact - **Type:** `object` נתונים ליצירת איש קשר. first_name, last_name ו-type חובה. *Schema `CreateContact` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": "", "notes": "" } ``` ### UpdateContact - **Type:** `object` עדכון חלקי של איש קשר (כל השדות אופציונליים) *Schema `UpdateContact` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "phone": "", "email": "", "company": "", "job_title": "", "type": "banker", "custom_type": "", "notes": "" } ``` ### UpdateLead - **Type:** `object` עדכון חלקי של ליד: רק השדות שנשלחו מתעדכנים. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `UpdateLead` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "email": "", "phone": "", "source": "", "status": "", "notes": "", "mortgage_purpose": "", "required_amount": 1, "total_income": 1, "has_property": true, "assigned_to": null } ``` ### MortgageFileDetails - **Type:** תיק משכנתא יחד עם הלווים הפעילים בו *Schema `MortgageFileDetails` is shown above.* ### MortgageFileCreateResult - **Type:** תגובת יצירת תיק: רשומת התיק יחד עם תוצאות יצירת הלווים, ההכנסות, חשבונות הבנק וההתחייבויות *Schema `MortgageFileCreateResult` is shown above.* ### MortgageFileUpdateResult - **Type:** תגובת עדכון תיק: רשומת התיק המעודכנת (ללא borrowers) יחד עם תוצאות שמירת ההכנסות, חשבונות הבנק וההתחייבויות *Schema `MortgageFileUpdateResult` is shown above.* ### UpdateMortgageFile - **Type:** `object` עדכון חלקי של תיק: רק השדות שנשלחו מתעדכנים. לא ניתן לעדכן לווים דרך נקודת קצה זו. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `UpdateMortgageFile` is shown above.* **Example:** ```json { "file_number": "", "title": "", "status": "", "status_comment": "", "customer_id": "", "assigned_to": null, "purposes": [ { "type": "", "amount": 1, "details": "", "fields": { "loan_purpose": "", "tax_declaration": "", "property_value": 1, "appraiser_value": 1, "loan_amount": 1, "equity": 1, "eligibility": 1, "contract_date_payment": "", "mortgage_type": "", "existing_mortgage": 1, "requested_mortgage": 1, "monthly_repayment": 1, "equity_amount": 1, "required_date": "" } } ], "loan_purpose": "", "loan_amount": 1, "total_amount": 1, "monthly_payment": 1, "loan_term": 1, "interest_rate": 1, "property_type": "", "property_value": 1, "property_address": "", "appraiser_value": 1, "equity": 1, "eligibility": 1, "remaining_mortgage": 1, "tax_declaration": "", "contract_date_payment": "", "financing_entity": { "bank_name": "", "branch_number": "", "branch_name": "", "contact_name": "", "contact_phone": "", "contact_email": "" }, "notes": "", "additional_info": { "general_notes": "", "important_info": { "payment_day": 1, "equity_sources": "", "has_grace_period": true, "grace_period_months": 1, "credit_report_status": "", "has_financial_issues": true, "financial_issues_details": "", "requested_monthly_payment": 1 } }, "additional_expenses": [ { "type": "", "amount": 1, "description": "" } ], "real_estate_details": { "additionalProperty": "anything" }, "custom_fields_mortgage": { "additionalProperty": "anything" }, "lead_source": "", "lead_id": "", "source_lead_id": "", "source_lead_number": "", "incomes": { "borrowers": [ { "borrowerId": "", "borrowerName": "", "employments": [ { "type": "salaried", "data": { "employers": [ { "company_name": "", "position": "", "start_date": "", "is_current": true, "end_date": "", "salary_slips": [ {} ] } ], "is_public_sector": true, "is_controlling_employee": true, "business_name": "", "business_type": "", "years_active": 1, "average_monthly_income": "", "monthly_amount": "", "source": "", "scholarship_amount": "", "institution": "", "description": "", "amount": "" } } ] } ] }, "bank_accounts": [ { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "", "borrowers": [ "" ], "isJoint": true } ], "obligations": [ { "id": "", "type": "bank_loan", "customType": "", "monthlyPayment": 1, "remainingAmount": 1, "endDate": "", "bank_id": "", "bankData": { "bankName": "", "bankDisplayName": "", "branchName": "", "branchDisplayName": "", "accountNumber": "" }, "assignedBorrowers": [ "" ] } ] } ``` ### UpdateBorrower - **Type:** `object` עדכון חלקי של לווה. שדות הלקוח מעדכנים את רשומת הלקוח המקושר (וחלים על כל התיקים שלו); שדות השיוך (relationship_type, custom_relationship, borrower_type, preferred_contact_methods, order_index) חלים על הלווה בתיק זה בלבד. *Schema `UpdateBorrower` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "email": "", "phone": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true, "relationship_type": "main", "custom_relationship": "", "borrower_type": "regular", "preferred_contact_methods": [ "email" ], "order_index": 1 } ``` ### BorrowerBase - **Type:** `object` רשומת השיוך של לווה לתיק, ללא פרטי הלקוח *Schema `BorrowerBase` is shown above.* **Example:** ```json { "id": "", "organization_id": "", "mortgage_file_id": "", "customer_id": null, "order_index": 1, "relationship_type": "main", "borrower_type": "regular", "custom_relationship": null, "preferred_contact_methods": [ "" ], "spouse_of_borrower_id": null, "created_at": "", "updated_at": null } ``` ### UpdateCustomer - **Type:** `object` עדכון חלקי של לקוח: רק השדות שנשלחו מתעדכנים. שדות שאינם מופיעים כאן מתעלמים מהם. *Schema `UpdateCustomer` is shown above.* **Example:** ```json { "first_name": "", "last_name": "", "entity_name": "", "id_type": "israeli_id", "id_number": "", "id_country": "", "issue_date": "", "id_expiry_date": "", "phone": "", "email": "", "birth_date": "", "gender": "male", "marital_status": "single", "custom_marital_status": "", "street": "", "city": "", "has_children": true, "children_under_18": 1, "children_birth_dates": [ "" ], "has_foreign_citizenship": true, "foreign_citizenship": "", "is_politically_exposed": true } ``` ### DeleteResult - **Type:** `object` תוצאת מחיקה *Schema `DeleteResult` is shown above.* **Example:** ```json { "success": true, "message": "" } ```