תחילת עבודה
- נכנסים כמנהל מערכת ופותחים את הגדרות ארגון ← API וחיבור למערכות (במצב מתקדם).
- לוחצים על יצירת מפתח API ומעתיקים אותו. המפתח מוצג פעם אחת בלבד, לכן כדאי לשמור אותו במנהל הסודות שלכם.
- מבצעים קריאה ראשונה. אם רשימת העובדים חוזרת, החיבור עובד.
כתובת בסיס: https://app.improvit.co.il/api/v1
curl "https://app.improvit.co.il/api/v1/employees" \
-H "Authorization: Bearer $IMPROVIT_API_KEY"כל הבקשות והתשובות ב-JSON (UTF-8). תאריכים בפורמט YYYY-MM-DD וחודשים בפורמט YYYY-MM, לפי שעון ישראל. סכומים במטבע של הארגון.
אימות
שולחים את המפתח בכותרת Authorization בכל בקשה. לכל ארגון יש מפתח פעיל אחד. יצירת מפתח חדש מבטלת מיד את הקודם וכך גם מבטלים מפתח שדלף.
Authorization: Bearer inc_XXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXהמפתח פועל בשם הארגון. שינויים שנעשים איתו מופיעים ביומן הפעילות בשם "API". אין לשים אותו בקוד שרץ בדפדפן או במאגר קוד ציבורי. קוראים ל-API מהשרת שלכם.
חודש טיפוסי
POST /targets עם "open": true. פותח את החודש לעובדים שנשלחו וקובע להם יעדים. מנהל עובר על היעדים ומאשר אותם ב-Improvit.
POST /actuals עם הסיכומים מתחילת החודש. העובדים והמנהלים רואים קצב ותחזית תגמול.
GET /payroll?month=…. מושכים את התגמול הסופי של כל עובד למערכת השכר.
כל חודש עובר שלושה שלבים: יעדים ← ביצועים ← סגור. אפשר לשנות יעדים רק בשלב היעדים וביצועים רק בשלב הביצועים, כך שחיבור אוטומטי אף פעם לא דורס מספרים שכבר אושרו.
כללי התאמה
- עובדים: לפי
employeeId(מספר העובד שמוגדר ב-Improvit, בדרך כלל המספר במערכת השכר). אם אין, לפי שם מלא. ההתאמה לא רגישה לאותיות גדולות ולרווחים מיותרים. - מדדים: לפי שם המדד כפי שמופיע ב-Improvit, או לפי ה-id שלו מ-
GET /metrics. ה-id לא משתנה כשמשנים שם למדד ולכן עדיף להשתמש בו בחיבורים קבועים. - ערכים: מספרים, או מחרוזות כמו "30,000" או "88%". null או מדד שלא נשלח משאירים את הערך הקיים. ערכים שליליים נדחים.
- בטוח לשליחה חוזרת: שולחים בכל פעם את הסיכום המלא מתחילת החודש, לא תוספות. שליחה כפולה של אותה בקשה לא משנה דבר.
רשימת עובדים
GET/api/v1/employees
כל העובדים בארגון, עם מספר העובד שבו משתמשים בבקשות האחרות.
curl "https://app.improvit.co.il/api/v1/employees" \
-H "Authorization: Bearer $IMPROVIT_API_KEY"{
"employees": [
{
"id": "k3Jd9sQe2Lm",
"employeeId": "1001",
"name": "Dana Levi",
"role": "sales",
"roleName": "Sales associate",
"branch": "Tel Aviv",
"active": true,
"kind": "employee"
}
]
}kind הוא "employee", או "agent" לסוכנות או זכיין חיצוניים. סוכנים מקבלים יעדים וביצועים כמו עובדים, אבל מקבלים תשלום מול חשבונית ולכן הם לא מופיעים בייצוא לשכר.
רשימת מדדים
GET/api/v1/metrics
המדדים במודל התמריצים שלכם ואילו מדדים נמדדים בכל תפקיד.
curl "https://app.improvit.co.il/api/v1/metrics" \
-H "Authorization: Bearer $IMPROVIT_API_KEY"{
"metrics": [
{ "id": "rev", "name": "Revenue", "unit": "ils", "unitLabel": "₪", "lowerIsBetter": false },
{ "id": "tv", "name": "TV sales", "unit": "units", "unitLabel": "units", "lowerIsBetter": false }
],
"roles": [
{ "key": "sales", "name": "Sales associate", "metrics": ["rev", "tv"] }
]
}שליחת יעדים
POST/api/v1/targets
קובע את היעדים של חודש. עם "open": true, החודש נפתח קודם לעובדים שנשלחו ועדיין אין להם אותו, בדיוק כמו "פתיחת החודש" במערכת (הבונוסים וההגדרות מועתקים מהחודש הקודם של העובד).
| שדה | סוג | תיאור |
|---|---|---|
month | string | YYYY-MM. ברירת מחדל: החודש הנוכחי. |
open | boolean | פתיחת החודש לעובדים שנשלחו ועדיין אין להם אותו. ברירת מחדל: false. |
rows[].employeeId | string | מספר עובד. או לשלוח name. |
rows[].name | string | שם מלא, משמש כשאין employeeId או שהוא לא נמצא. |
rows[].targets | object | שם מדד או id ← יעד. |
curl -X POST "https://app.improvit.co.il/api/v1/targets" \
-H "Authorization: Bearer $IMPROVIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"month": "2026-11",
"open": true,
"rows": [
{
"employeeId": "1001",
"targets": {
"Revenue": 250000,
"TV sales": 40
}
},
{
"name": "Avi Cohen",
"targets": {
"rev": 180000
}
}
]
}'{
"ok": true,
"month": "2026-11",
"openedEmployees": 2,
"updatedEmployees": 2,
"updatedValues": 3,
"skipped": [],
"unknownColumns": []
}שליחת ביצועים
POST/api/v1/actuals
מעדכן את התוצאות מתחילת החודש הנוכחי לעובדים שהיעדים שלהם אושרו. תחזית הקצב, לוח הביצועים ועדכוני ההתקדמות מחושבים לפי asOf, לכן שולחים את התאריך שהמספרים נכונים אליו.
| שדה | סוג | תיאור |
|---|---|---|
asOf | string | YYYY-MM-DD, לא בעתיד. ברירת מחדל: היום. |
rows[].employeeId | string | מספר עובד. או לשלוח name. |
rows[].name | string | שם מלא, משמש כשאין employeeId או שהוא לא נמצא. |
rows[].values | object | שם מדד או id ← סיכום מתחילת החודש. |
curl -X POST "https://app.improvit.co.il/api/v1/actuals" \
-H "Authorization: Bearer $IMPROVIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"asOf": "2026-11-15",
"rows": [
{
"employeeId": "1001",
"values": {
"Revenue": 131500,
"TV sales": 22
}
}
]
}'{
"ok": true,
"asOf": "2026-11-15",
"updatedEmployees": 1,
"updatedValues": 2,
"skipped": [ { "label": "1002", "reason": "targets" } ],
"unknownColumns": []
}עובדים שלא השתנה אצלם דבר לא נספרים כמעודכנים וגם לא כמדולגים.
מבצעים מתפרצים: שולחים את המכירות של המבצע באותו אובייקט values, לפי קוד הפריט, שם הפריט או שם המבצע (כמות שנמכרה מתחילת החודש). לסכום המכירה מוסיפים למפתח " amount" או " סכום", למשל "AC-12 amount". מתעדכנים רק מבצעים שמופיעים בחודש של העובד.
שליחת ביטולים
POST/api/v1/cancellations
רושם ביטולי עסקאות. כל ביטול מקוזז מהחודש שבו הוא נרשם (חודש פתוח), גם כשהמכירה עצמה הייתה בחודש קודם שכבר נסגר ושולם. התגמול מחושב לפי הביצוע נטו (ביצוע פחות ביטולים, לא פחות מ-0). בכל שורה חובה לשלוח אסמכתא: שליחה חוזרת של אותה אסמכתא מעדכנת את הביטול ולא מוסיפה ביטול שני ולכן אפשר לנסות שוב בבטחה. משתמשים בזה רק אם נתוני הביצוע שלכם עוד לא מקוזזים מביטולים (הגדרות ארגון ← ביטולים).
| שדה | סוג | תיאור |
|---|---|---|
month | string | YYYY-MM, החודש שממנו מקזזים (חייב להיות פתוח לעובד). ברירת מחדל: החודש הנוכחי. |
rows[].reference | string | מספר עסקה / הזמנה. חובה; ייחודי בארגון. |
rows[].employeeId | string | מספר עובד. או לשלוח name. |
rows[].values | object | שם מדד או id ← הכמות או הסכום שבוטלו (חיובי). או לשלוח metric ו-quantity למדד אחד. |
rows[].originalMonth | string | YYYY-MM של המכירה המקורית (רשות). |
rows[].date | string | YYYY-MM-DD של הביטול. ברירת מחדל: היום. |
rows[].note | string | סיבה או הערה (רשות). |
curl -X POST "https://app.improvit.co.il/api/v1/cancellations" \
-H "Authorization: Bearer $IMPROVIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rows": [
{
"employeeId": "1001",
"reference": "SO-55120",
"values": {
"TV sales": 1,
"Revenue": 4200
},
"originalMonth": "2026-10",
"date": "2026-11-04",
"note": "Customer returned the TV"
}
]
}'{
"ok": true,
"month": "2026-11",
"added": 1,
"updated": 0,
"unchanged": 0,
"skipped": [],
"results": [ { "index": 0, "reference": "SO-55120", "status": "added" } ]
}שורה מדולגת (עם סיבה) כשהעובד לא נמצא, החודש שלו לא פתוח או כבר נסגר, המדד לא מוכר או שאי אפשר לקזז בו, או כשהאסמכתא שייכת לביטול בחודש סגור (נעול). בשורות הייצוא לשכר מופיעים גם הביטולים שקוזזו באותו חודש.
ייצוא לשכר
GET/api/v1/payroll
התגמול לכל עובד בחודש: עמלה, בונוס יעד, בונוס ביצועים ומבצעים מתפרצים, מוכן לקליטה במערכת השכר כרכיב שכר. כברירת מחדל מוחזרות רק רשומות סגורות (סופיות). סוכנים וזכיינים לא כלולים (הם מקבלים תשלום מול חשבונית).
| שדה | סוג | תיאור |
|---|---|---|
month | string | YYYY-MM. ברירת מחדל: החודש הנוכחי. |
status | closed | all | all מחזיר גם רשומות פתוחות, מסומנות final: false (לתצוגה מקדימה ולהפרשות). |
format | json | csv | csv מחזיר קובץ עם שורת כותרות (UTF-8 עם BOM, נפתח נכון באקסל). |
curl "https://app.improvit.co.il/api/v1/payroll?month=2026-10" \
-H "Authorization: Bearer $IMPROVIT_API_KEY"{
"month": "2026-10",
"currency": "ILS",
"statusFilter": "closed",
"count": 1,
"total": 4850,
"rows": [
{
"employeeId": "1001",
"name": "Dana Levi",
"branch": "Tel Aviv",
"role": "Sales associate",
"status": "closed",
"score": 1.08,
"commission": 3250,
"targetBonus": 1000,
"performanceBonus": 600,
"flashDeals": 0,
"total": 4850,
"cancellations": { "TV sales": 1 },
"currency": "ILS",
"final": true,
"closedAt": "2026-11-02T08:14:00.000Z"
}
]
}curl "https://app.improvit.co.il/api/v1/payroll?month=2026-10&format=csv" \
-H "Authorization: Bearer $IMPROVIT_API_KEY" -o payroll-2026-10.csvשגיאות
שגיאות מחזירות קוד HTTP וגוף עם קוד קבוע והודעה קריאה:
{ "error": { "code": "bad_month", "message": "month must be YYYY-MM." } }| HTTP | code | משמעות |
|---|---|---|
| 400 | bad_rows · too_many_rows · bad_month | גוף הבקשה או פרמטר לא תקינים. |
| 401 | unauthorized | המפתח חסר, שגוי או שהוחלף. |
| 402 | subscription_inactive | המנוי או תקופת הניסיון של הארגון הסתיימו. |
| 409 | cancellations_netted | נשלחו ביטולים, אבל בארגון הזה הביצועים כבר מגיעים מקוזזים מביטולים. |
| 404 | not_found | אין נקודת קצה כזו, או שיטה שגויה. |
| 429 | rate_limited | יותר מדי בקשות. ממתינים דקה ומנסים שוב. |
| 500 | internal | תקלה אצלנו. מנסים שוב בהמתנה הולכת וגדלה. |
שורות שדולגו
בקשה יכולה להצליח גם כשחלק מהשורות דולגו. לכל שורה שדולגה יש סיבה:
| reason | משמעות |
|---|---|
notFound | אין עובד עם המספר או השם הזה. |
noEntry | החודש לא פתוח לעובד הזה (ביעדים אפשר לשלוח open: true). |
targets | נשלחו ביצועים אבל היעדים עוד לא אושרו. |
approved | נשלחו יעדים אבל הם כבר אושרו. |
closed | החודש סגור לעובד הזה. |
duplicate | אותו עובד מופיע פעמיים; רק השורה הראשונה נקלטת. |
badNumber | ערך שאינו מספר או שלילי; שאר הערכים התקינים בשורה נשמרים. |
unknownColumns מפרט שמות מדדים בבקשה שלא תואמים אף מדד. בודקים אותם מול GET /metrics.
ביטולים שדולגו
| reason | משמעות |
|---|---|
reference_required | בשורה אין מספר אסמכתא. |
employee_not_found | אין עובד עם המספר או השם הזה. |
month_not_open | החודש לא פתוח לעובד הזה. |
closed | החודש כבר סגור לעובד הזה. |
locked | האסמכתא שייכת לביטול בחודש סגור. |
unknown_metric:<name> | אין מדד כזה לעובד הזה. |
notCancellable | אפשר לקזז רק במדדי יחידות, עסקאות או סכומים (לא במדדי תקרה, ציונים או מדדים איכותיים). |
noValues · badValue · badMonth · badDate · badOrigMonth · origAfter | לא נשלחה כמות, ערך אינו מספר חיובי, או שתאריך או חודש מקורי לא תקינים או מאוחרים מהביטול. |
מגבלות ואבטחה
- עד 120 בקשות בדקה לכל ארגון.
- עד 5,000 שורות בבקשה (500 בביטולים). בצוותים גדולים יותר מפצלים לכמה בקשות.
- HTTPS בלבד. הנתונים נשמרים ב-Google Cloud בישראל (me-west1).
- נשמר רק גיבוב (hash) של המפתח. המפתח אבד? יוצרים חדש בהגדרות.
- כל שינוי שנעשה דרך ה-API נרשם ביומן הפעילות של הארגון.
- גרסה v1 יציבה: מוסיפים שדות אבל לא מוחקים ולא משנים שמות. שינויים שוברים יגיעו כ-v2, בהודעה מראש.
בלי קוד
אין מפתח זמין? Improvit יכולה למשוך ביצועים כל לילה מגיליון Google שהמערכת שלכם מעדכנת (הגדרות ארגון ← עדכון ביצועים ← חיבור אוטומטי) ומנהלים יכולים לייבא קובץ אקסל בכל רגע. את התגמול אפשר לייצא לאקסל ממסך החודש.
צריכים עזרה בחיבור?
נעזור לצוות המחשוב או למטמיע שלכם לתכנן את החיבור למערכות המכירות והשכר.
פנו אלינו