למפתחים · ספקי שעוני נוכחות
API הנוכחות של Finwork
גרסה 2026-10 · עודכן: 20 באוקטובר 2026
המסמך הזה מיועד לחברות שעוני נוכחות. מי שמממש אותו מעביר ל-Finwork, פעם בחודש ובאופן אוטומטי, את נתוני הנוכחות של כל עובד/ת אצל לקוח משותף: ימים, שעות, שעות נוספות והיעדרויות. הנתונים נכנסים ישר לחודש השכר של המעסיק.
ל-Connecteam, HiBob, Jibble, Clockify ול-Factorial כבר יש חיבור ישיר. המעסיק מזין ב-Finwork את פרטי הגישה, ואנחנו מושכים את השעות דרך ה-API שלכם. מהצד שלכם לא צריך לממש דבר. המסמך הזה מיועד לכל שעון אחר.
בקצרה
- מה שולחים: לכל עובד/ת — סיכום חודשי (ימים, שעות רגילות, שעות נוספות לפי אחוז, חופשה, מחלה, מילואים, חג), תאריכי היעדרויות, ובאופן אופציונלי גם פירוט יומי.
- לאן:
POST https://finwork.co.il/api/v1/attendance/submissions, בגוף JSON. - איך מזדהים: לכל מעסיק יש מפתח משלו, והוא יוצר אותו ב-Finwork. המפתח עובר בכותרת
Authorization: Bearer fwa_live_…. - מה קורה אחר כך: כל עובד/ת מזוהה לפי ת״ז, והנתונים נכנסים לחודש השכר. התשובה מפרטת, לפי מספרי שורות, מה נכנס ומה לא.
- מתי: בסוף כל חודש (
final), ושוב אם יש תיקון. עד שהחודש נשלח לעיבוד השכר, שליחה חדשה מחליפה את הנתונים הקודמים.
איך מתחילים
- המעסיק יוצר מפתח ב-Finwork: אינטגרציות ← שעון נוכחות. בוחרים את השעון ואז "יצירת מפתח". המפתח מוצג פעם אחת בלבד, והמעסיק מוסר אותו לכם.
- בודקים את המפתח:
GET /pingמחזיר את שם המעסיק. כך מוודאים שחיברתם את הלקוח הנכון. - שולחים בדיקה:
POST /submissions?dryRun=trueעובר את כל הבדיקות ואת התאמת העובדים, ולא שומר כלום. אפשר לחזור על זה כמה פעמים שצריך. - עולים לאוויר: שולחים בסוף כל חודש עם
"status": "final". ראו גם את רשימת הבדיקות.
הזדהות
כל בקשה נושאת את מפתח המעסיק בכותרת Authorization: Bearer fwa_live_…. המפתח מורכב מ-fwa_live_ ועוד 32 תווים. הוא שייך למעסיק אחד ולשעון אחד, ונותן הרשאה אחת בלבד: לשלוח נתוני נוכחות של אותו מעסיק.
- HTTPS בלבד. בקשה שמגיעה ב-HTTP לא נענית.
- שומרים את המפתח מוצפן, ולא רושמים אותו ביומנים או בהודעות שגיאה.
- אם המעסיק יוצר מפתח חדש, הקודם מפסיק לעבוד מיד ומחזיר
401. אם יש חשד שמפתח דלף, צריך לפנות למעסיק, וגם ל-security@finwork.co.il. - אל Finwork ניגשים רק במפתח. אנחנו אף פעם לא מבקשים מכם סיסמה או גישה למערכת שלכם.
נקודות הקצה
| בקשה | מה היא עושה | תשובה |
|---|---|---|
GET /ping | בודקת את המפתח ומחזירה את שם המעסיק ואת החודשים שמותר לשלוח | 200 / 401 |
POST /submissions | שליחת נתוני חודש. final נכנס לשכר; draft נשמר ומוצג למעסיק בלבד | 200 / 202 (draft) / 409 / 422 |
POST /submissions?dryRun=true | כל הבדיקות והתאמת העובדים — בלי לשמור | 200 / 422 |
GET /submissions/{id} | מצב של שליחה קודמת (רק של אותו מפתח) | 200 / 404 |
POST /form101 | טופס 101 חתום של עובד/ת שנקלט/ה אצלכם (PDF או צילום) — נקרא לטופס, ומי שאין לו/ה כרטיס נקלט/ת | 200 / 201 / 413 / 415 / 422 |
הכתובת: https://finwork.co.il/api/v1/attendance. כל התשובות ב-JSON, עם הכותרת x-finwork-api-version: 2026-10.
מבנה השליחה
שליחה אחת = חודש אחד של מעסיק אחד. בדוגמה המלאה למטה מופיעים כל השדות.
| שדה | חובה | מה זה |
|---|---|---|
apiVersion | כן | תמיד 2026-10 |
submissionId | כן | מזהה ייחודי שלכם לשליחה. עד 120 תווים: אותיות לטיניות, ספרות ו־. _ : -. ניסיון חוזר נשלח עם אותו מזהה, ותיקון עם מזהה חדש |
period | כן | החודש, בפורמט YYYY-MM |
status | לא | final (ברירת מחדל): נכנס לשכר. draft: נשמר ומוצג למעסיק, ולא נכנס לשכר |
generatedAt | לא | מתי הופק הדוח אצלכם, ב-ISO 8601 |
source.system / source.version | לא | שם המערכת והגרסה, לצורך תמיכה |
employer.companyNumber | מומלץ | ח״פ או ע״מ של המעסיק, 9 ספרות. אם הוא לא תואם למעסיק של המפתח, השליחה נדחית. זו הגנה מפני שליחה ללקוח הלא נכון |
employees[] | כן | העובדים, 1 עד 2,000 |
העובד/ת
| שדה | חובה | מה זה |
|---|---|---|
nationalId | כן לתושבי ישראל | מספר זהות, 9 ספרות (אפשר בלי אפסים מובילים). ספרת הביקורת נבדקת. זה המפתח שלפיו מזהים את העובד/ת |
passportNumber | לעובדים זרים | מספר הדרכון. עובד/ת זר/ה מזוהה לפי מספר העובד, אחרי שיוך ראשון של המעסיק |
employeeNumber | מומלץ | מספר העובד אצלכם. אחרי זיהוי ראשון הוא נלמד, ומשמש לזיהוי גם כשאין ת״ז |
firstName / lastName | מומלץ | לתצוגה למעסיק כשצריך לשייך ידנית. לפי שם לא מזהים |
phone / email / startDate | מומלץ | נייד, מייל ותאריך תחילת עבודה כפי שהם אצלכם. לא משמשים לזיהוי. כשמגיע/ה עובד/ת שאין לו/ה כרטיס אצל המעסיק — הם ממלאים מראש את הקליטה, והקישור לטופס 101 יוצא לנייד |
summary | כן | הסיכום החודשי — ראו למטה |
absences[] | מומלץ | היעדרויות עם תאריכים. חובה בפועל בשביל מחלה, כי דמי מחלה מחושבים לפי היום ברצף |
days[] | לא | פירוט יומי, לבדיקת עקביות ולתאריכי מחלה כשאין absences |
כל עובד/ת חייב/ת להופיע עם nationalId או עם employeeNumber, לפחות אחד מהם. אותו/ה עובד/ת לא יכול/ה להופיע פעמיים באותה שליחה.
הסיכום החודשי (summary)
כל הכמויות הן מספרים עשרוניים עם עד 2 ספרות אחרי הנקודה. למשל 8.5 הוא שמונה שעות וחצי, ו-0.5 הוא חצי יום. לא שולחים HH:MM. שדה שלא נשלח לא משנה את מה שכבר רשום, ו-0 הוא אפס.
| שדה | יחידה | מקסימום | מה זה | איך זה נכנס לשכר |
|---|---|---|---|---|
workDays | ימים | 31 | ימי עבודה בפועל | ימי עבודה בחודש השכר |
regularHours | שעות | 400 | שעות רגילות (100%) | שעות עבודה בחודש השכר |
overtime125Hours | שעות | 200 | שעות נוספות 125% | שעות נוספות 125% |
overtime150Hours | שעות | 200 | שעות נוספות 150% | שעות נוספות 150% |
restDayHours | שעות | 200 | שעות במנוחה השבועית / בחג (150%) | מצטרפות לשעות 150% |
overtime175Hours | שעות | 200 | שעות נוספות 175% | נרשמות לחודש כשורת שעות נוספות להזנה לפי התעריף |
overtime200Hours | שעות | 200 | שעות נוספות 200% | נרשמות לחודש כשורת שעות נוספות להזנה לפי התעריף |
nightHours | שעות | 300 | שעות לילה | נרשמות לחודש (לבדיקת משמרת לילה) |
vacationDays | ימים | 31 | ימי חופשה | ימי חופשה |
sickDays | ימים | 31 | ימי מחלה | ימי מחלה (ותאריכים מ-absences — לחישוב לפי החוק) |
reserveDays | ימים | 31 | ימי מילואים | ימי מילואים |
holidayDays | ימים | 31 | ימי חג בתשלום | ימי חג (לדמי חגים) |
unpaidLeaveDays | ימים | 31 | חופשה ללא תשלום | נרשמת לחודש לטיפול המשרד |
absentDays | ימים | 31 | היעדרות לא מוצדקת | נרשמת לחודש לטיפול המשרד |
travelDays | ימים | 31 | ימי הגעה לעבודה (לדמי נסיעה) | נרשמים לחודש (דמי נסיעה) |
היעדרויות (absences)
כל היעדרות היא { type, from, to, days? }. התאריכים בפורמט YYYY-MM-DD וכלולים בטווח. days הוא אופציונלי, למשל בשביל חצי יום. היעדרות שחוצה סוף חודש מפוצלת: החלק של כל חודש נשלח בחודש שלו.
| type | מה זה |
|---|---|
vacation | חופשה |
sick | מחלה |
child_sick | מחלת ילד/ה |
family_sick | מחלת בן/בת זוג או הורה |
reserve | מילואים |
reserve_spouse | מילואים של בן/בת הזוג |
mourning | אבל |
unpaid | חופשה ללא תשלום |
maternity | חופשת לידה |
work_injury | פגיעה בעבודה |
pregnancy | שמירת הריון / טיפולי פוריות |
holiday | חג |
other | אחר |
פירוט יומי (days) — אופציונלי
כל יום הוא { date, dayType?, workedMinutes?, absence? }. dayType הוא אחד מ-workday, friday, holiday_eve, rest, holiday. workedMinutes הוא מספר שלם בין 0 ל-1440.
הפירוט היומי לא מחליף את הסיכום. השכר מחושב לפי summary, והימים משמשים לבדיקת עקביות ולתאריכי מחלה כשאין absences.
כללי חישוב — מה השעון מחשב, ומה Finwork
- השעון מחשב את הפיצול לפי אחוזים לפי חוק שעות עבודה ומנוחה וההסכם של המעסיק: שעות רגילות, השעתיים הנוספות הראשונות ביום ב-125%, מעבר להן 150%. עבודה במנוחה השבועית או בחג היא 150%, ושעות נוספות בהן הן 175% ו-200%.
- כל שעה נספרת פעם אחת בלבד. הסכום
regularHours + overtime125Hours + overtime150Hours + restDayHours + overtime175Hours + overtime200Hoursהוא כל השעות שעבדו בחודש. - Finwork מחשבת את השכר: התעריפים, דמי מחלה לפי החוק (יום 1, ימים 2–3, מיום 4), דמי חגים ודמי נסיעה, לפי הנתונים שנשלחו.
- שעות ב-175% וב-200%, שעות לילה, חל״ת, היעדרות לא מוצדקת וימי נסיעה לא נבלעים בשדה אחר. הם נרשמים בחודש השכר כשורה גלויה למשרד, ותשובת השליחה מציינת זאת בקוד
EXTRA_HOURS_NOTED. - אזור הזמן הוא שעון ישראל. תאריכים נכתבים בפורמט YYYY-MM-DD.
- עובד/ת שהתחיל/ה או סיים/ה באמצע החודש נשלח/ת עם הימים שעבד/ה בפועל.
- אילו חודשים מותר לשלוח: החודש הנוכחי, החודש הקודם, או חודש ישן יותר שעדיין פתוח בשכר. חודש שכבר נשלח לעיבוד מחזיר
409 PERIOD_LOCKED. - נתונים שהמעסיק או המשרד הזינו ידנית לא נדרסים. במקרה כזה התשובה מציינת
KEPT_MANUALבשורה של העובד/ת.
תיקונים וניסיון חוזר
- ניסיון חוזר (למשל אחרי timeout) נשלח עם אותו
submissionIdואותו תוכן. הוא מחזיר את אותה תשובה עם"replay": true, והנתונים לא נקלטים פעמיים. - תיקון נשלח עם
submissionIdחדש. אפשר לשלוח את כל החודש או רק את העובדים שתוקנו. הנתונים של העובדים שבשליחה מתחלפים, כולל תאריכי המחלה, ושאר העובדים לא משתנים. - אותו
submissionIdעם תוכן אחר מחזיר409 SUBMISSION_CONFLICT. כך תיקון לא נבלע בטעות כניסיון חוזר. - יותר מ-2,000 עובדים, או גוף גדול מ-2MB, מפצלים לכמה שליחות. לכל שליחה
submissionIdמשלה, וכל אחת חלה רק על העובדים שבה.
התאמת עובדים
- לפי ת״ז, מול העובדים של המעסיק. אחרי התאמה, מספר העובד שלכם נלמד לחודשים הבאים.
- לפי מספר עובד שכבר נלמד, מת״ז או משיוך ידני של המעסיק.
- לפי שם — לא. שני עובדים יכולים לשאת אותו שם. עובד/ת שלא זוהה/תה מסומן/ת
EMPLOYEE_NOT_FOUNDוממתין/ה למעסיק: קליטה כעובד/ת חדש/ה (כרטיס וקישור לטופס 101), שיוך לעובד/ת קיים/ת, או "לא בשכר". אחרי זה הנתונים נכנסים, ובחודש הבא הזיהוי אוטומטי. עד שמטפלים — המעסיק לא יכול לשלוח את חודש השכר. - מי שהמעסיק סימן "לא בשכר" (בעלים, קבלן) מסומן/ת
NOT_ON_PAYROLLבכל שליחה, ולא נכנס/ת. - אם הת״ז ומספר העובד מצביעים על שני עובדים שונים, מסמנים
IDENTITY_CONFLICTולא מנחשים.
טופס 101 — עובד/ת שנקלט/ה אצלכם
עובד/ת שנקלט/ה במערכת שלכם ומילא/ה שם טופס 101 — שלחו לנו את הטופס החתום, והוא/היא נקלט/ת גם אצלנו בלי למלא שוב. הטופס נקרא לתוך מבנה טופס 101, המס מחושב לפיו, והמעסיק מקבל התראה לבדוק ולאשר.
POST https://finwork.co.il/api/v1/attendance/form101
{
"apiVersion": "2026-10",
"employee": { "nationalId": "123456782", "employeeNumber": "1042" },
"file": { "contentBase64": "JVBERi0xLjcK...", "mimeType": "application/pdf", "filename": "101-dana.pdf" }
}- זיהוי: לפי
nationalId(מהבקשה או מהטופס), או לפיemployeeNumberשכבר נלמד. ת״ז בבקשה שלא תואמת לטופס —IDENTITY_CONFLICT. - אין עובד/ת כזה/ו — נפתח כרטיס מהטופס (ת״ז תקינה, שם, נייד או מייל),
employeeNumberנלמד, והקישור להשלמת הפרטים והבנק יוצא לנייד. תשובה 201. - קובץ עד 3MB. הסוג נבדק לפי התוכן: PDF, JPG, PNG או WEBP.
- בטופס רשום מעסיק אחר —
FORM101_OTHER_EMPLOYER, ולא נשמר דבר.
תשובות וקודים
שליחה תקינה מחזירה 200, ושליחת draft מחזירה 202. בתשובה יש ספירות, ורשימת issues לפי מספרי שורות: מי לא זוהה, מי נשמר ידנית, ומה נרשם לטיפול המשרד. אם יש שגיאת בדיקה (422), שום דבר לא נשמר. בתשובות אין שמות ואין ת״ז, רק נתיבים וקודים.
HTTP/1.1 200 OK
{
"submission": {
"id": "6f1c2b8e-1d3a-4b5c-9e2f-7a8b9c0d1e2f",
"submissionId": "meckano-48213-2026-10-final-1",
"period": "2026-10",
"status": "partial",
"final": true,
"receivedAt": "2026-11-01T04:00:03.120Z",
"employees": { "received": 42, "matched": 41, "applied": 40, "keptManual": 1, "unmatched": 1 }
},
"issues": [
{ "path": "employees[17]", "code": "EMPLOYEE_NOT_FOUND", "message": "...", "messageHe": "..." },
{ "path": "employees[3]", "code": "KEPT_MANUAL", "message": "...", "messageHe": "..." }
],
"warnings": [],
"payrollMonth": { "opened": false }
}HTTP/1.1 422 Unprocessable Entity
{
"error": { "code": "VALIDATION_FAILED", "message": "Submission failed validation", "messageHe": "השליחה לא עברה בדיקה" },
"errors": [
{ "path": "employees[4].nationalId", "code": "INVALID_NATIONAL_ID", "message": "Invalid Israeli ID number (check digit)", "messageHe": "מספר זהות לא תקין (ספרת ביקורת)" },
{ "path": "employees[9].summary.sickDays", "code": "OUT_OF_RANGE", "message": "Value out of allowed range: max 31 per month", "messageHe": "ערך מחוץ לטווח המותר: עד 31 לחודש" }
],
"warnings": [ { "path": "employees[0].summary.mealVouchers", "code": "UNKNOWN_FIELD", "message": "Unknown field — ignored", "messageHe": "שדה לא מוכר — לא נקלט" } ]
}| קוד | HTTP | משמעות |
|---|---|---|
INVALID_JSON | 400 | הגוף אינו JSON תקין |
BODY_TOO_LARGE | 413 | הבקשה גדולה מ-2MB — לפצל לכמה שליחות |
UNAUTHORIZED | 401 | מפתח חסר, שגוי או מבוטל |
RATE_LIMITED | 429 | יותר מדי בקשות — לנסות שוב בעוד כמה דקות |
UNSUPPORTED_VERSION | 422 | גרסת API לא נתמכת |
REQUIRED | 422 | שדה חובה חסר |
INVALID_VALUE | 422 | ערך לא תקין |
OUT_OF_RANGE | 422 | ערך מחוץ לטווח המותר |
OUT_OF_PERIOD | 422 | תאריך מחוץ לחודש שנשלח |
INVALID_NATIONAL_ID | 422 | מספר זהות לא תקין (ספרת ביקורת) |
MISSING_IDENTITY | 422 | לעובד/ת חסרים ת"ז ומספר עובד — צריך לפחות אחד |
DUPLICATE_EMPLOYEE | 422 | אותו/ה עובד/ת מופיע/ה פעמיים בשליחה |
TOO_MANY_EMPLOYEES | 422 | יותר מ-2000 עובדים בשליחה אחת |
EMPLOYER_MISMATCH | 422 | מספר החברה לא תואם למעסיק של המפתח |
PERIOD_LOCKED | 409 | חודש השכר כבר נשלח לעיבוד — תיקון ייכנס בחודש הבא, בתיאום עם המשרד |
PERIOD_NOT_OPEN | 409 | אפשר לשלוח רק את החודש הנוכחי, את הקודם, או חודש שכבר פתוח בשכר |
SUBMISSION_CONFLICT | 409 | אותו submissionId כבר נשלח עם תוכן אחר — לתיקון שולחים מזהה חדש |
NOT_FOUND | 404 | לא נמצא |
UNKNOWN_FIELD | בתוך issues / warnings | שדה לא מוכר — לא נקלט |
SICK_DAYS_MISMATCH | בתוך issues / warnings | סך ימי המחלה בהיעדרויות שונה מ-sickDays |
EMPLOYEE_NOT_FOUND | בתוך issues / warnings | העובד/ת לא זוהה/תה אצל המעסיק — ממתין/ה לשיוך ידני |
IDENTITY_CONFLICT | בתוך issues / warnings | הת"ז ומספר העובד מצביעים על שני עובדים שונים — ממתין לשיוך ידני |
NOT_ON_PAYROLL | בתוך issues / warnings | המעסיק סימן את האדם הזה כמי שאינו בשכר — לא נקלט |
FILE_TOO_LARGE | 413 | הקובץ גדול מ-3MB |
UNSUPPORTED_FILE | 415 | הקובץ חייב להיות PDF או צילום (JPG / PNG / WEBP) |
NOT_FORM101 | 422 | הקובץ אינו טופס 101 |
FORM101_UNREADABLE | 422 | לא הצלחנו לקרוא את הטופס — שלחו PDF מקורי או צילום ברור |
FORM101_NO_EMPLOYEE | 422 | אין עובד/ת כזה/ו אצל המעסיק, ואי אפשר לפתוח כרטיס מהטופס (חסרים ת"ז תקינה, שם, או נייד / מייל) |
FORM101_OTHER_EMPLOYER | 422 | בטופס רשום מעסיק אחר |
KEPT_MANUAL | בתוך issues / warnings | למעסיק יש כבר נתונים שהוזנו ידנית לחודש הזה — הם נשמרו ולא נדרסו |
EXTRA_HOURS_NOTED | בתוך issues / warnings | שעות 175%/200%, לילה, חל"ת, היעדרות או ימי נסיעה — נרשמו לחודש לטיפול המשרד |
מגבלות
- עד 60 בקשות ב-10 דקות לכל מפתח, ועד 300 ב-10 דקות מאותה כתובת. מעבר לזה חוזרת התשובה
429, ומנסים שוב בעוד כמה דקות עם המתנה הולכת וגדלה. - גוף הבקשה עד 2MB, עד 2,000 עובדים בשליחה, ועד 31 ימים בפירוט היומי של עובד/ת.
- שגיאה
500אפשר לשלוח שוב עם אותו submissionId. הנתונים לא ייקלטו פעמיים.
אבטחה ופרטיות
- מינימום נתונים. לא שולחים טביעות אצבע, תמונות, מיקום GPS או נתונים ביומטריים. לשכר הם לא נחוצים, ואנחנו לא קולטים אותם.
- הנתונים מוצפנים בדרך (TLS). ההרשאה במסד הנתונים מבודדת בין מעסיקים: מפתח של מעסיק אחד לא רואה ולא כותב שום דבר של מעסיק אחר.
- שורות שלא זוהו נשמרות מוצפנות עד שהמעסיק משייך אותן. מהשליחה עצמה נשמרות רק ספירות וקודים.
- פגיעות אבטחה מדווחים ל-security@finwork.co.il. מדיניות האבטחה.
בדיקות לפני עלייה לאוויר
כל הבדיקות האלה רצות עם ?dryRun=true, מול מפתח אמיתי של לקוח משותף, ובלי לשמור כלום:
GET /pingמחזיר את שם המעסיק הנכון.- שליחה של חודש מלא עוברת בלי שגיאות, וכל העובדים מזוהים.
- ת״ז עם ספרת ביקורת שגויה מחזירה
INVALID_NATIONAL_IDבשורה הנכונה. - עובד/ת שלא קיים/ת אצל המעסיק מחזיר/ה
EMPLOYEE_NOT_FOUND, ושאר השליחה עוברת. - ימי מחלה עם תאריכים: סך הימים ב-absences שווה ל-sickDays, ואין אזהרה.
- עובד/ת עם שעות 175% מקבל/ת
EXTRA_HOURS_NOTED, ולא שגיאה. - אחרי עלייה לאוויר: ניסיון חוזר עם אותו מזהה מחזיר
"replay": true, ותיקון נשלח עם מזהה חדש.
קבצים להורדה
- finwork-attendance-api.json — הגדרת OpenAPI 3.1, לייבוא ל-Postman או ליצירת קוד.
- attendance-sample.json — שליחה לדוגמה, אותה דוגמה כמו בעמוד הזה.
- attendance-template.csv — לשעון שעוד לא מחובר: קובץ חודשי שהמעסיק מעלה בחודש השכר, עם אותם שדות.
דוגמה מלאה
{
"apiVersion": "2026-10",
"submissionId": "meckano-48213-2026-10-final-1",
"period": "2026-10",
"status": "final",
"generatedAt": "2026-11-01T06:00:00+02:00",
"source": { "system": "Meckano", "version": "5.12" },
"employer": { "companyNumber": "511234567" },
"employees": [
{
"nationalId": "123456782",
"employeeNumber": "1042",
"firstName": "דנה",
"lastName": "כהן",
"phone": "0521234567",
"startDate": "2026-09-14",
"summary": {
"workDays": 20,
"regularHours": 172.5,
"overtime125Hours": 6,
"overtime150Hours": 1.5,
"restDayHours": 0,
"vacationDays": 1,
"sickDays": 2,
"reserveDays": 0,
"holidayDays": 0,
"travelDays": 20
},
"absences": [
{ "type": "sick", "from": "2026-10-12", "to": "2026-10-13" },
{ "type": "vacation", "from": "2026-10-20", "to": "2026-10-20" }
],
"days": [
{ "date": "2026-10-01", "dayType": "workday", "workedMinutes": 545 },
{ "date": "2026-10-12", "dayType": "workday", "absence": "sick" }
]
}
]
}# 1. המפתח תקין, ולאיזה מעסיק הוא שייך
curl -s https://finwork.co.il/api/v1/attendance/ping \
-H "Authorization: Bearer $FINWORK_KEY"
# 2. בדיקה בלי לשמור (מומלץ בכל פיתוח)
curl -s -X POST "https://finwork.co.il/api/v1/attendance/submissions?dryRun=true" \
-H "Authorization: Bearer $FINWORK_KEY" \
-H "Content-Type: application/json" \
--data @october.json
# 3. השליחה האמיתית
curl -s -X POST https://finwork.co.il/api/v1/attendance/submissions \
-H "Authorization: Bearer $FINWORK_KEY" \
-H "Content-Type: application/json" \
--data @october.json
# 4. מצב שליחה
curl -s https://finwork.co.il/api/v1/attendance/submissions/6f1c2b8e-1d3a-4b5c-9e2f-7a8b9c0d1e2f \
-H "Authorization: Bearer $FINWORK_KEY"שאלות על המימוש
דרך המעסיק המשותף, או בווטסאפ 050-2277087. כדי שנוכל לבדוק, ציינו את מזהה השליחה (submission.id), ולא את המפתח.