Makor API#

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

כתובת בסיס (ייצור)https://makor.izid.io/api/v1
כתובת בסיס (ניסוי)https://sandbox.makor.izid.io/api/v1
סוג תוכןapplication/json; charset=utf-8
אימותAuthorization: Bearer mk_live_… / mk_test_… / mk_op_live_…
שגיאותapplication/problem+json (RFC 9457)
סכמה/api/openapi.json · /api/docs

הפקת חשבונית בקריאה אחת

צרו מפתח API בהגדרות → API ושלחו מסמך. בברירת מחדל המסמך מופק מיד: מוקצה לו מספר, מתבצעת פנייה לרשות המסים כשנדרש, והוא מרונדר ומופק — הכול בבקשה אחת.

curl
# Sandbox host + sandbox key. Swap both together to go live.
curl -X POST 'https://sandbox.makor.izid.io/api/v1/documents' \
  -H 'Authorization: Bearer mk_test_1a2b3c4d5e6f...' \
  -H 'Idempotency-Key: invoice-2026-0001' \
  -H 'Content-Type: application/json' \
  -d '{
    "doc_type": 305,
    "issue_date": "2026-08-07",
    "customer_name": "לקוח לדוגמה",
    "customer_tax_id": "123456782",
    "lines": [
      { "description": "ייעוץ טכנולוגי", "quantity": 1, "unit_price": 6000 }
    ]
  }'
201 Created
HTTP/1.1 201 Created

{
  "id": "019fdad4-b4bb-70ce-94fd-8164faf6f426",
  "doc_type": 305,
  "doc_type_name_he": "חשבונית מס",
  "doc_type_name_en": "Tax Invoice",
  "series": "A",
  "doc_number": 1,
  "status": "issued",
  "issue_date": "2026-08-07",
  "customer_name": "לקוח לדוגמה",
  "customer_tax_id": "123456782",
  "subtotal": 6000.0,
  "discount_total": 0.0,
  "taxable_amount": 6000.0,
  "vat_rate_bp": 1800,
  "vat_amount": 1080.0,
  "total": 7080.0,
  "withholding_amount": 0,
  "currency": "ILS",
  "fx_rate": 1.0,
  "ils": null,
  "allocation_status": "approved",
  "allocation_number": "20260807123456782000000001",
  "is_sandbox": true,
  "language": "he",
  "parent_id": null,
  "open_balance": null
}
Node.js
const KEY = process.env.MAKOR_API_KEY;        // mk_live_… or mk_test_…
const BUSINESS = process.env.MAKOR_BUSINESS_ID;

// The key prefix and the base URL must always agree.
const BASE_URL = KEY.startsWith("mk_test_")
  ? "https://sandbox.makor.izid.io/api/v1"
  : "https://makor.izid.io/api/v1";

const res = await fetch(
  `${BASE_URL}/businesses/${BUSINESS}/documents`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": crypto.randomUUID(),
    },
    body: JSON.stringify({
      doc_type: 320,
      issue_date: new Date().toISOString().slice(0, 10),
      customer_name: "לקוח לדוגמה",
      lines: [{ description: "מנוי חודשי", quantity: 1, unit_price: 199 }],
      payments: [{ method: "card", amount: 234.82, card_brand: "Visa" }],
    }),
  }
);

if (res.status === 202) {
  const held = await res.json();
  console.log(held.rejection_code, held.decisions);
} else if (!res.ok) {
  const problem = await res.json();
  throw new Error(`${problem.code}: ${problem.detail}`);
}
Python
import os, uuid, httpx

KEY = os.environ["MAKOR_API_KEY"]
BUSINESS = os.environ["MAKOR_BUSINESS_ID"]

# The key prefix and the base URL must always agree.
BASE_URL = (
    "https://sandbox.makor.izid.io/api/v1" if KEY.startswith("mk_test_") else "https://makor.izid.io/api/v1"
)

with httpx.Client(
    base_url=BASE_URL,
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=30,
) as client:
    r = client.post(
        f"/businesses/{BUSINESS}/documents",
        headers={"Idempotency-Key": str(uuid.uuid4())},
        json={
            "doc_type": 305,
            "issue_date": "2026-08-07",
            "customer_tax_id": "123456782",
            "customer_name": "לקוח לדוגמה",
            "lines": [
                {"description": "ייעוץ", "quantity": 1, "unit_price": 6000}
            ],
        },
    )

    if r.status_code == 202:
        held = r.json()
        client.post(
            f"/businesses/{BUSINESS}/documents/{held['id']}/allocation-decision",
            json={"choice": "continue"},
        )
    else:
        r.raise_for_status()

אימות#

מקור משתמשת במפתחות API אטומים כטוקן נשיאה (Bearer). אין שלב החלפת טוקן ואין מה לרענן — המפתח שיצרתם הוא בדיוק מה שנשלח בכל בקשה.

header
Authorization: Bearer mk_live_9f8e7d6c5b4a3928170615243342516071829304
קידומתסביבההתנהגות
mk_live_ייצורתקף רק מול https://makor.izid.io/api/v1. יוצר מסמכים אמיתיים: צורך מהמספור החוקי, פונה לרשות המסים, ומופיע בדוחות ובמבנה האחיד.
mk_test_סביבת ניסויתקף רק מול https://sandbox.makor.izid.io/api/v1. יוצר מסמכי ניסוי בלבד — ראו סביבת ניסוי.
mk_op_live_ייצור (מפעיל)מפתח של מפעיל: קשור למפעיל ולא לעסק בודד, ומגיע לכל עסק שהעניק לו הרשאה. ראו מפעילים.
mk_op_test_ניסוי (מפעיל)מפתח מפעיל לסביבת הניסוי. תקף רק מול https://sandbox.makor.izid.io/api/v1.
המפתח מוצג פעם אחת בלבד
המפתח המלא מוחזר רק בתשובה שיוצרת אותו; מקור שומרת ממנו רק תקציר SHA-256. להחלפת מפתח: צרו חדש ובטלו את הישן — הביטול נכנס לתוקף מיידית (בקשות נוספות יקבלו 401).

מצבי כשל

401 Unauthorized
MAKOR-401
מפתח חסר, פגום, לא מוכר או מבוטל.
404 Not Found
MAKOR-404
המפתח תקין אך שייך לעסק אחר מזה שב-Makor-Business — או, במפתח מפעיל, שהעסק לא העניק לכם הרשאה או שההרשאה בוטלה. גישה לעסק זר מדווחת כ”לא נמצא” ולא כ”אסור”, כדי שמחזיקי מפתחות לא יוכלו לגלות אילו עסקים קיימים ומי לקוח של מי.
403 Forbidden
MAKOR-403
האימות הצליח, אך למפתח חסרה ההרשאה שה-endpoint דורש.

הרשאות (Scopes)#

כל endpoint מצהיר על הרשאה אחת בדיוק. מפתח מקבל את ההרשאות המינימליות שביקשתם; אם לא ציינתם הרשאות, הוא מקבל את המקסימום שתפקידכם מתיר.

הרשאהמה היא מתירה
documents:readצפייה ברשימת מסמכים, קריאת מסמך והורדת PDF
documents:writeיצירה, הפקה, ביטול, מחיקת טיוטות, החלטות הקצאה וקישורי שיתוף
customers:readצפייה בלקוחות ובהסכמתם למשלוח מסמכים
customers:writeיצירה, עדכון והשבתה של לקוחות; רישום הסכמה
items:readצפייה בקטלוג הפריטים
items:writeיצירה, עדכון והשבתה של פריטים
scans:readצפייה בסריקות והורדת תמונת העמוד
scans:writeהעלאה, אישור, דחייה ומחיקה של סריקות
reports:readדוחות הכנסות, מע"מ וניכוי במקור
export:readהפקה והורדה של קבצי מבנה אחיד
אצל מפעילים ההרשאה היא חיתוך
למפתח מפעיל יש הרשאה אפקטיבית שונה בכל עסק: הרשאות המפתח ∩ ההרשאות שהעסק העניק. עסק יכול להעניק documents:read בלבד למפעיל שהמפתח שלו כולל כתיבה, והתוצאה תהיה קריאה בלבד באותו עסק. אל תסיקו מההרשאות של המפתח — GET /operator/businesses מחזיר את ההרשאה האפקטיבית לכל עסק.
מפתחות של רואה חשבון מוגבלים בצד השרת
מפתח שנוצר בידי משתמש שתפקידו accountant מצומצם להרשאות קריאה בלבד, ללא קשר למה שהבקשה ביקשה. התשובה מחזירה את ההרשאות שניתנו בפועל — קראו אותן ואל תניחו.

סביבת ניסוי#

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

סביבהכתובת בסיסמפתח
ייצורhttps://makor.izid.io/api/v1mk_live_…
ניסויhttps://sandbox.makor.izid.io/api/v1mk_test_…
הכתובת והמפתח חייבים להתאים
מפתח mk_test_ מול כתובת הייצור נדחה ב-403, וכך גם מפתח mk_live_ מול כתובת הניסוי — עם הודעה שמפנה לכתובת הנכונה. זו הסיבה שאי אפשר להפיק חשבונית אמיתית בטעות בזמן פיתוח: צריך לטעות בשני מקומות בו-זמנית.
דרך ה-API

צרו מפתח עם "sandbox": true וקראו לכתובת הניסוי. כל קריאה פועלת על נתוני ניסוי — בלי פרמטרים נוספים.

דרך האפליקציה

הגדרות → סביבת ניסוי → כניסה למצב ניסוי. באנר כתום מסמן את הסשן וכל מה שתיצרו הוא מסמך ניסוי.

מה הבידוד אומר בפועל

מספור נפרד
מובטח
מסמכי ניסוי שואבים מסדרת מספור משלהם לכל סוג מסמך. המספור החוקי והרציף שלכם לעולם לא מתקדם בגלל ניסוי.
אין תעבורה לרשות המסים
מובטח
בקשות הקצאה למסמכי ניסוי נענות בסימולטור דטרמיניסטי ולעולם לא נשלחות לרשות — גם בסביבת ייצור.
מחוץ לספרים
מובטח
מסמכי ניסוי לא מופיעים בדוחות הכנסות, מע"מ וניכוי במקור, ולא בייצוא המבנה האחיד.
מסומן בבירור
מובטח
כל PDF של ניסוי נושא חותמת אלכסונית "SANDBOX — אינו מסמך חשבונאי", וה-API מחזיר is_sandbox: true.
עיוורון דו-כיווני
מובטח
מפתח ייצור מקבל 404 על מסמך ניסוי ולהפך; קריאות רשימה מחזירות תמיד סביבה אחת בלבד.

טריגרים דטרמיניסטיים להקצאה

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

הסכום מסתיים בהתוצאה המדומהHTTP
…60מעוכב לבדיקה, קוד 460 — זרימת ארבע ההחלטות202
…61קיימת חשבונית לא מאושרת שממתינה להחלטה, קוד 461202
…03תקלה טכנית — המסמך מופק עם failed_retro_pending201
כל סכום אחראושר, עם מספר הקצאה מדומה בן 26 ספרות201
לדוגמה: unit_price: 6000.60 (₪6,000.60) מפעיל עיכוב בקוד 460, בעוד 6000.00 יאושר.

מוסכמות#

כמה כללים תקפים בכל ה-API. הבנה שלהם מראש חוסכת את רוב ההפתעות באינטגרציה.

כסף
מספר (₪)
הסכומים הם שקלים עם עד שתי ספרות אחרי הנקודה. ₪1,180.00 הם 1180.0; יותר משתי ספרות נדחה ולא מעוגל מאחורי הגב שלכם. אל תשלחו סכום מע"מ — הוא מחושב בשרת.
מע"מ
מחושב בשרת
מחושב לפי השיעור החוקי בתוקף בתאריך issue_date (18% מ-1.1.2025), פעם אחת לכל קבוצת שיעור ברמת המסמך עם עיגול half-up — במכוון לא פר שורה, כדי למנוע סחף אגורות. עוסק פטור ומלכ"ר מקבלים אפס. המחירים שאתם שולחים הם לפני מע"מ, אלא אם צירפתם prices_include_vat: true — ואז כל מחיר והנחה בבקשה נקראים ככוללי מע"מ והשרת מחלץ אותו מהם, כך שסה"כ המסמך יוצא בדיוק הסכום ששלחתם.
תאריכים
YYYY-MM-DD
תאריכי לוח בלבד, ללא אזור זמן. חותמות זמן בתשובות הן ISO-8601 ב-UTC; המספור ותקופות הדיווח לפי שעון ישראל.
מזהים
UUIDv7
מזהים ממויינים לפי זמן, כך שסדר לקסיקוגרפי שווה לסדר יצירה — זה מה שמאפשר עימוד יציב בקורסור.
מספרי זיהוי
מחרוזת, 9 ספרות
ח.פ / מספר עוסק / ת.ז — בדיוק תשע ספרות כולל ספרת ביקורת, שנבדקת ביצירת העסק (MAKOR-BIZ-002).
טקסט בעברית
UTF-8
שלחו עברית כמות שהיא ב-JSON. הרינדור מטפל בכיווניות, וייצוא המבנה האחיד ממיר ל-ISO-8859-8 כפי שהתקן מחייב.

שגיאות#

השגיאות תואמות ל-RFC 9457 בפורמט application/problem+json. הסתמכו על שדה code היציב ולא על הטקסט החופשי. כל שגיאה כוללת detail באנגלית ו-detail_he בעברית שניתן להציג ישירות למשתמש הקצה.

problem+json
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/problem+json

{
  "type": "https://makor.izid.io/dev#errors",
  "title": "Payment lines (5000) must sum to document total (11800)",
  "status": 422,
  "code": "MAKOR-DOC-011",
  "detail": "Payment lines (5000) must sum to document total (11800)",
  "detail_he": "סכום אמצעי התשלום חייב להיות שווה לסכום המסמך (כולל שורת ניכוי במקור)"
}
סטטוסמשמעות
400 / 422הפרת ולידציה או כלל עסקי — ראו אינדקס הקודים למטה
401האימות נכשל (מפתח חסר, לא מוכר או מבוטל)
403מאומת אך חסרה ההרשאה הנדרשת, או תפקיד לקריאה בלבד
404המשאב לא קיים, או שייך לעסק או לסביבה אחרת
409התנגשות מצב — למשל הפקת מסמך שכבר אינו טיוטה
202לא שגיאה: החשבונית עוכבה ברשות המסים וממתינה להחלטתכם
ולידציה ברמת השדה שמבוצעת בשכבת הסכמה (טיפוסים, תבניות, אורכים) מחזירה 422 תקני של הפריימוורק עם מערך detail, ללא קוד MAKOR-*. כללים עסקיים תמיד מחזירים MAKOR-*.

אידמפוטנטיות#

יצירת מסמך היא הקריאה האחת שאסור לחזור עליה בטעות — כפילות תצרוך מספר מסמך חוקי שאי אפשר להשתמש בו שוב.

Idempotency-Key
כותרת, מחרוזתרשות
שלחו ערך ייחודי (UUID עובד מצוין) ב-POST /documents. ניסיון חוזר עם אותו מפתח יחזיר את התשובה המקורית — אותו מסמך, אותו מספר — במקום ליצור מסמך שני. המפתחות נשמרים 48 שעות.
מצבתוצאה
אותו מפתח, אותו גוף בקשה, הושלםהתשובה המקורית מוחזרת כמות שהיא
אותו מפתח, גוף בקשה שונה422 MAKOR-IDEM-001 — מפתח יכול לתאר בקשה אחת בלבד
אותו מפתח בזמן שהבקשה הראשונה עדיין רצה409 MAKOR-IDEM-002 — נסו שוב בעוד רגע
בלי מפתח אידמפוטנטיות, timeout ברשת משאיר אתכם בלי דרך לדעת אם החשבונית הופקה. בייצור — תמיד שלחו מפתח.

עימוד#

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

response
{
  "items": [ /* … */ ],
  "next_cursor": "019fdad4-b4bb-70ce-94fd-8164faf6f426"
}
limit
מספר שלם= 50
גודל עמוד, מקסימום 200.
cursor
מחרוזת (uuid)רשות
העבירו את next_cursor מהתשובה הקודמת כדי לקבל את העמוד הבא. התוצאות מסודרות מהחדש לישן; null אומר שהגעתם לסוף. קורסור לא תקין מחזיר 422 MAKOR-PAGE-001.
לקוחות ופריטים משתמשים בחיפוש פשוט עם limit ו-q במקום קורסור — אלה אוספים קטנים שמנוהלים ידנית.

מספרי הקצאה#

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

מתי זה חל

סוג המסמך
305 / 320
חשבונית מס וחשבונית מס/קבלה בלבד. חשבוניות זיכוי ומסמכים ללא מע"מ לעולם אינם עוברים אישור.
הסכום
≥ הסף
הסכום לפני מע"מ שווה או גבוה מהסף שבתוקף בתאריך ההפקה — ₪5,000 מ-1.6.2026 (₪10,000 מ-1.1.2026, ₪20,000 מ-1.1.2025, ₪25,000 מ-5.5.2024).
הצד שכנגד
עסק לעסק
לקוח עסקי: customer_tax_id הופך לחובה מעל הסף (MAKOR-DOC-040).

תוצאות אפשריות

HTTPallocation_statusמה קרה
201approvedאושר. allocation_number מכיל את מספר האישור המלא בן 26 הספרות; ב-PDF מודפסות תשע הספרות הימניות תחת ”מספר הקצאה“.
201not_requiredמתחת לסף, לקוח פרטי, או סוג מסמך שאינו בגדר החובה.
201failed_retro_pendingרשות המסים לא הייתה זמינה. התקנות מתירות להפיק בכל זאת; את המספר מבקשים אחר כך ב-POST /documents/{document_id}/allocation-request, עד שנה מתאריך החשבונית.
202rejectedעוכב לבדיקה (קוד 460 או 461). למסמך הוקצה מספר אך הוא לא הופק — הוא נשאר pending עד שתבחרו מסלול.
202 Accepted
HTTP/1.1 202 Accepted

{
  "id": "019fdad4-...",
  "status": "pending",
  "doc_number": 42,
  "allocation_status": "rejected",
  "allocation_decision_required": true,
  "rejection_code": 460,
  "rejection_message": "Data is correct but invoice was not approved",
  "decisions": ["cancel", "continue", "reverse_charge", "object"]
}

טיפול בחשבונית מעוכבת

ארבע האפשרויות הבאות הן החלופות הקבועות בחוק. חובה לבחור אחת — המסמך לא יכול להישאר תלוי באוויר — וההחלטה מדווחת בחזרה לרשות.

choiceמה קורההמשמעות
cancelהמסמך עובר לסטטוס מבוטלהמספר נשמר כמסמך מבוטל — לא ממוחזר לעולם, כך שהסדרה נשארת רציפה.
continueמופק ללא מספר הקצאהב-PDF מודפס הכיתוב המחייב "אין לנכות מס תשומות בגין חשבונית זו" — הלקוח לא יוכל לנכות מס תשומות.
reverse_chargeנשלח מחדש כהיפוך חיובחשבונית עצמית בשיעור מע"מ אפס: הלקוח מדווח על העסקה. מקבלת מספר הקצאה משלה.
objectמוגשת השגה רשמיתהמסמך נשאר pending עם allocation_status: objection עד להכרעת הרשות.
curl
curl -X POST 'https://makor.izid.io/api/v1/documents/{document_id}/allocation-decision' \
  -H 'Authorization: Bearer mk_live_...' \
  -H 'Content-Type: application/json' \
  -d '{ "choice": "continue" }'
למה חשבונית שנדחתה שומרת על מספרה
המספר מוקצה לפני הפנייה לרשות, מפני שבקשת האישור חייבת לכלול את מספר החשבונית. לפי הוראות ניהול ספרים מסמך מבוטל נשאר בסדרה ואינו משחרר את מספרו — וזה בדיוק מה ששומר על הרצף ועל יכולת הביקורת.

אובייקט המסמך#

מוחזר מכל קריאה שקשורה למסמכים. הסכומים באגורות; שדות כספיים תמיד קיימים, גם כשערכם אפס.

id
string (uuid)חובה
מזהה קבוע.
Makor-Business
headerחובה
מפתח שקשור לעסק אחד אינו צריך לציין כלום — העסק נגזר מהמפתח. מפתח מפעיל מציין את העסק בכותרת Makor-Business, לפי ה-uuid שלנו או מספר עוסק / ח.פ. ח.פ שמתאים ליותר מעסק אחד שיש לכם גישה אליו נדחה עם 409 MAKOR-BIZ-005 במקום להיבחר בניחוש.
doc_type
integerרשות
קוד סוג המסמך — ראו סוגי מסמכים. אלה בדיוק הקודים של תקן המבנה האחיד. חובה לציין בדיוק אחד מבין doc_type ו-doc_kind.
payment_method
stringרשות
קיצור ל”כל המסמך שולם באמצעי הזה”: cash · transfer · card · other. הסכום נגזר מסך המסמך, ולקבלה — מסכום החשבוניות המקושרות. לא ניתן לשלוח אותו יחד עם payments (422 MAKOR-DOC-014), ואם אין ממה להסיק סכום מוחזר 422 MAKOR-DOC-013. check מוכר אך נדחה: צ'ק מחייב מספר צ'ק לפי מבנה אחיד, ולכן יש להשתמש ב-payments.
external_ref
string ≤100רשות
מזהה משלכם למסמך, למשל מספר הזמנה במערכת שלכם. נשמר ומוחזר כמות שהוא, אינו מתפרש, ואינו חייב להיות ייחודי.
draft
booleanרשות
ברירת המחדל היא להפיק. שלחו true כדי ליצור טיוטה שתופק מאוחר יותר דרך POST /documents/{document_id}/issue. שימו לב ש-status בתשובה עשוי להיות pending גם כשביקשתם להפיק, אם רשות המסים מעכבת בשער ההקצאה — ולכן זו כוונה ולא סטטוס.
send_email
boolean | null= null
האם המסמך הזה יישלח במייל ללקוח בעת ההפקה, וגובר על ההגדרה של העסק לשני הכיוונים. null — ברירת המחדל וגם המשמעות של כל בקשה שנכתבה לפני שהשדה היה קיים — פירושו שההגדרה של העסק מחליטה. true ללקוח שאין בכרטיסו כתובת מוחזר ב-422 MAKOR-MAIL-002, ועל בקשת draft ב-422 MAKOR-DOC-016 — בשני המקרים לפני שנוצר מסמך כלשהו.
doc_kind
stringרשות
כינוי קריא לאותו קוד, למשל tax_invoice במקום 305. שקול לחלוטין ל-doc_type; שליחת שניהם מוחזרת עם 422 MAKOR-DOC-003 גם כשהם תואמים, כי אחרת סתירה אמיתית תעבור בשקט בפעם הבאה. כינוי לא מוכר מחזיר 422 MAKOR-DOC-004 ומונה את המוכרים.
doc_type_name_he / _en
stringחובה
שם סוג המסמך לתצוגה, מוכן להדפסה.
series
stringחובה
סדרת מספור, ברירת מחדל "A".
doc_number
integer | nullחובה
מוקצה בהפקה ולא ניתן לשינוי אחריה; null כל עוד המסמך טיוטה.
status
stringחובה
draft · pending · issued · cancelled.
customer_id / customer_name / customer_tax_id
string | nullחובה
תצלום של פרטי הלקוח שהוקפא בהפקה — עריכה מאוחרת של כרטיס הלקוח לא משנה מסמך שהופק.
issue_date / due_date
date | nullחובה
תאריכי לוח.
subtotal
number (₪)חובה
סכום שורות המסמך לפני הנחת מסמך, ללא מע"מ.
discount_total
number (₪)חובה
הנחה ברמת המסמך.
taxable_amount
number (₪)חובה
בסיס המע"מ אחרי חלוקת ההנחה — זה הסכום שנבדק מול סף ההקצאה.
vat_rate_bp
integerחובה
שיעור בנקודות בסיס; 1800 = 18%. אפס כשהמסמך אינו נושא מע"מ.
vat_amount
number (₪)חובה
המע"מ המחושב.
total
number (₪)חובה
סה"כ כולל מע"מ.
withholding_amount
number (₪)חובה
סכום שורות התשלום מסוג ניכוי מס במקור.
currency
stringחובה
קוד ISO 4217 של המטבע שבו נכתבו כל הסכומים שלמעלה. השמטת השדה בבקשה פירושה שקלים — בדיוק כמו כל בקשה שנכתבה לפני שהשדה היה קיים. כל מטבע אחר מחייב fx_rate.
fx_rate
number | nullחובה
ערך שקלי של יחידה אחת מהמטבע ביום המסמך. נשמר על המסמך ואינו משתנה בדיעבד — הוא חלק ממה שהמסמך מצהיר. אינו נשלף בשרת בזמן הפקה; ראו GET /fx/rates. עבור מסמך שקלי הערך הוא 1.
ils
object | nullחובה
אותו מסמך בשקלים, לפי השער שנשמר: subtotal · discount_total · taxable_amount · vat_amount · total · withholding_amount. null למסמך שקלי, שבו היה חוזר על אותם מספרים. זהו הצד שרשות המסים רואה — מבנה אחיד, דוחות מע"מ, וסף ההקצאה.
allocation_status
stringחובה
ראו סטטוסי הקצאה.
allocation_number
string | nullחובה
מספר האישור המלא בן 26 ספרות. מדפיסים את תשע הספרות האחרונות.
can_request_allocation
booleanרשות
האם POST /documents/{id}/allocation-request ייענה עבור המסמך הזה. שקלול של המצב, סוג המסמך, מספר הלקוח והשנה שהרשות מתירה — כדי שלא תצטרכו לשחזר את הכלל. הדבר היחיד שאינו נבדק כאן הוא חיבור העסק לרשות.
language
stringחובה
he או en — קובע את שפת רינדור המסמך.
parent_id
string | nullחובה
בחשבונית זיכוי: החשבונית המזוכה.
is_sandbox
booleanרשות
true עבור מסמכי ניסוי.
open_balance
number (₪) | nullרשות
רק בקריאת מסמך בודד של חשבונית או חשבונית עסקה שהופקה: סה"כ פחות כל מה שכבר נסגר בקבלות ובזיכויים.
lines[] / payments[]
arrayרשות
נכללים רק בקריאת מסמך בודד, לא ברשימות.

ערכים אפשריים#

אוצר מילים קבוע שחוזר בכל ה-API.

סוגי מסמכים

קודdoc_kindשםEnglishהערות
10price_quoteהצעת מחירQuoteללא השפעה חשבונאית
100orderהזמנהOrderללא השפעה חשבונאית
200delivery_noteתעודת משלוחDelivery note
300proformaחשבונית עסקהProformaדרישת תשלום שאינה יוצרת אירוע מע"מ — הדפוס של בסיס מזומן
305tax_invoiceחשבונית מסTax invoiceמספר הקצאה מעל הסף
320tax_invoice_receiptחשבונית מס/קבלהInvoice-receiptמחייבת תשלומים; ההקצאה חלה
330credit_noteחשבונית זיכויCredit noteמחייבת parent_id; לעולם ללא הקצאה
400receiptקבלהReceiptמחייבת תשלומים; סוגרת חשבוניות דרך linked_invoices
405donation_receiptקבלה על תרומהDonation receiptעמותות בלבד, סדרה נפרדת
סוג הישות קובע אילו קודים מותר להפיק
עוסק פטור — 10, 100, 200, 300, 400 בלבד; אינו רשאי להפיק חשבונית מס כלל (MAKOR-DOC-001).
עוסק מורשה / חברה / שותפות — הכול חוץ מ-405.
עמותה — 10, 300, 400, 405 בלבד; ללא מע"מ.

סטטוס מסמך

ערךמשמעות
draftניתן לעריכה, ללא מספר, ללא תוקף משפטי
pendingממוספר ומוקפא; ממתין לאישור או להחלטה
issuedסופי ובלתי ניתן לשינוי
cancelledבוטל; המספר נשמר בסדרה

סטטוס הקצאה

ערךמשמעות
not_requiredמחוץ לחובת ההקצאה
pendingהבקשה בדרך
approvedאושר, המספר נשמר
rejectedמעוכב — נדרשת החלטה
rejected_continueהופק ללא אישור, עם הכיתוב המשפטי
reverse_chargeהופק כהיפוך חיוב
objectionהוגשה השגה, ממתין להכרעה
failed_retro_pendingתקלה טכנית; המספר מתבקש בדיעבד

אמצעי תשלום

ערךשדות נוספים
cash—
chequeמחייב cheque_number; מומלץ גם bank_code, branch, account, paid_date
cardcard_brand, card_last4 (בדיוק 4 ספרות), installments
bank_transfertransfer_ref
appביט, פייבוקס וכדומה
withholdingניכוי מס במקור — לא כסף שהתקבל, אך מסלק את החוב ונספר בסכום
other—

טיפול מע"מ

ערךמשמעות
standardחייב מע"מ בשיעור מלא (18%)
exemptעסקה פטורה — מחוץ לבסיס המע"מ
zeroמע"מ בשיעור אפס, למשל יצוא

סוגי ישות

ערךבעברית
osek_paturעוסק פטור
osek_mursheעוסק מורשה
companyחברה בע"מ
partnershipשותפות
amutaעמותה / מלכ"ר

מסמכים#

ליבת ה-API. כל הנתיבים יחסיים לכתובת הבסיס ומשויכים לעסק.

POST/documentsdocuments:write

מפיק את המסמך: ולידציה → הקצאת מספר רציף → אישור מול רשות המסים → רינדור PDF. מחזיר 201, או 202 כשהרשות מעכבת את החשבונית. שליחת "draft": true עוצרת אחרי הוולידציה ומשאירה טיוטה ללא מספר.

פרמטרים וכותרות

Makor-Business
כותרתרשות
מפתח מפעיל מציין כאן על איזה עסק הוא פועל — uuid או מספר עוסק.
sandbox
boolean= false
יצירת מסמך ניסוי. מתעלמים ממנו במפתחות API — הסביבה של המפתח תמיד גוברת.
Idempotency-Key
כותרתרשות
מומלץ בחום בכל בקשת כתיבה — שליחה חוזרת מחזירה את התשובה המקורית.

גוף הבקשה

doc_type
integerחובה
אחד מקודי סוגי המסמכים.
issue_date
date= היום
ברירת מחדל: התאריך הנוכחי בישראל. קובע את שיעור המע"מ ואת סף ההקצאה שיחולו.
customer_id
string (uuid)רשות
לקוח קיים; השם, מספר הזיהוי והכתובת מועתקים למסמך בהפקה.
customer_name
stringרשות
לקוח חד-פעמי, או דריסה של השם השמור.
customer_tax_id
string (9 ספרות)רשות
חובה מעל סף ההקצאה (MAKOR-DOC-040).
lines[]
arrayרשות
description (חובה, ≤500), quantity (חובה, > 0), unit_price (חובה, ≥ 0), unit, discount, vat_treatment, item_id. נדרש לכל סוג מסמך חוץ מקבלות טהורות.
payments[]
arrayרשות
method ו-amount חובה. נדרש עבור 320, 400 ו-405, וסכומם חייב להיות שווה בדיוק לסכום המסמך (MAKOR-DOC-011).
linked_invoices[]
arrayרשות
{ invoice_id, amount } — החשבוניות שהקבלה סוגרת, במלואן או בחלקן. נבדק מול היתרה הפתוחה של כל חשבונית תחת נעילת שורה, כך שקבלות מקבילות לא יכולות לסגור יתר.
parent_id
string (uuid)רשות
חובה בחשבונית זיכוי (330): החשבונית המזוכה.
document_discount
number (₪)= 0
הנחה על כלל המסמך, מחולקת יחסית על בסיס המע"מ.
prices_include_vat
boolean= false
המחירים בשורות (וההנחות) כבר כוללים מע"מ, והשרת מחלץ אותו מהם. הסכומים נשמרים ומיוצאים למבנה אחיד לפני מע"מ בכל מקרה; המסמך המודפס מציג את המחירים כפי שהוזנו. סה"כ המסמך יוצא בדיוק הסכום שהוזן.
due_date
dateרשות
תאריך לתשלום שיודפס על המסמך.
language
string= "he"
he או en — בוחר את שפת רינדור ה-PDF.
series
string= "A"
סדרת מספור חלופית (למשל לפי סניף). כל סדרה רציפה בפני עצמה.
notes / footer_text
stringרשות
טקסט חופשי שיודפס על המסמך.
קבלה שסוגרת חשבונית, עם ניכוי במקור
{
  "doc_type": 400,
  "issue_date": "2026-08-07",
  "customer_id": "019fda...",
  "payments": [
    { "method": "bank_transfer", "amount": 1121.00, "paid_date": "2026-08-07" },
    { "method": "withholding",   "amount": 59.00 }
  ],
  "linked_invoices": [
    { "invoice_id": "019fdac1-...", "amount": 1180.00 }
  ]
}
למה שורות התשלום חייבות להסתכם בסה"כ
ניכוי מס במקור אינו כסף שקיבלתם, אבל הוא כן מסלק את החוב. רישומו כשורת תשלום מסוג withholding הוא מה שמאזן את הקבלה — בדוגמה למעלה ₪1,121.00 הגיעו בהעברה ו-₪59.00 נוכו במקור, ויחד הם סוגרים חשבונית של ₪1,180.00.
POST/documents/{document_id}/issuedocuments:write

מפיק טיוטה קיימת — אותו צינור ואותה סמנטיקה של 201/202 כמו יצירה עם יצירה רגילה. הפקה של מסמך שאינו טיוטה מחזירה 409 MAKOR-DOC-060, וכך גם נראית בקשה כפולה.

POST/documents/{document_id}/allocation-decisiondocuments:write
choice
stringחובה
אחד מ-cancel, continue, reverse_charge, object.
reason
string ≤500רשות
נשמר על המסמך בעת ביטול.

תקף רק כשהמסמך pending וסטטוס ההקצאה שלו rejected או objection; אחרת 409 MAKOR-ALLOC-001. אם גם בקשת היפוך החיוב נדחית תקבלו 409 MAKOR-ALLOC-002.

POST/documents/{document_id}/allocation-requestdocuments:write

מבקש מספר הקצאה למסמך שכבר הופק. זהו הצד השני של השער: השער מבקש בזמן ההפקה, וזה מבקש אחר כך — עד שנה מתאריך החשבונית. מיועד לשלושת המצבים שבהם חשבונית קיימת ללא מספר: failed_retro_pending (הרשות לא הייתה זמינה), rejected_continue (הופקה ללא הקצאה לאחר דחייה) ו-not_required (מתחת לסף — הרשות מקצה גם עבורן). אם למסמך כבר יש מספר תקבלו 409 MAKOR-ALLOC-004: חשבונית אחת, הקצאה אחת. can_request_allocation על המסמך אומר מראש אם הקריאה תיענה.

curl
curl -X POST 'https://makor.izid.io/api/v1/documents/{document_id}/allocation-request' \
  -H 'Authorization: Bearer mk_live_...'
200 OK
HTTP/1.1 200 OK

{
  "outcome": "approved",
  "rejection_code": null,
  "rejection_message": null,
  "document": {
    "id": "019fdad4-...",
    "status": "issued",
    "doc_number": 42,
    "allocation_status": "approved",
    "allocation_number": "20260807123456782000000042",
    "allocation_number_short": "000000042",
    "can_request_allocation": false
  }
}
200 אינו “כן”
הקריאה מחזירה 200 בכל שלוש התשובות, ו-outcome אומר איזו מהן: approved — למסמך יש מספר; rejected — הרשות ענתה על החשבונית הזאת ודחתה (rejection_code 460/461); failed — לא הושגה תשובה. בשתי האחרונות המסמך חוזר ללא שינוי: הוא הופק כדין, הוא בידי הלקוח, והדחייה אינה פותחת מחדש את החלטת ארבעת המסלולים. אם הוקצה מספר למסמך שהיה rejected_continue, הכיתוב "אין לנכות מס תשומות" אינו מופיע בעותק העדכני (?copy=true). המקור החתום נשמר ללא שינוי.
GET/documentsdocuments:read

פרמטרים וכותרות

doc_type
integerרשות
סינון לפי קוד סוג.
status
stringרשות
draft · pending · issued · cancelled.
from_date / to_date
dateרשות
סינון לפי issue_date, כולל.
limit
integer= 50
מקסימום 200.
cursor
stringרשות
מתוך next_cursor הקודם.
sandbox
boolean= false
קריאות עם סשן מחליפות סביבה; מפתחות API נעולים לסביבה שלהם.

מחזיר { items, next_cursor }, מהחדש לישן. פריטי הרשימה אינם כוללים lines, payments ו-open_balance — לשם כך קראו מסמך בודד.

GET/documents/{document_id}documents:read

המסמך המלא, כולל lines[], payments[] ו — בחשבוניות ובחשבוניות עסקה שהופקו — open_balance.

POST/documents/{document_id}/canceldocuments:write
reason
string ≤500רשות
סיבת הביטול; חובה בחשבונית מס שהופקה.
original_not_delivered
booleanרשות
חובה true לביטול חשבונית מס שהופקה: המקור לא יצא מרשות העסק.
not_reported
booleanרשות
חובה true: לא נכללה בדוח התקופתי.
המספר נשמר — ביטול לעולם לא משחרר אותו לשימוש חוזר. מסמך שכבר מקושרות אליו קבלות או זיכויים אינו ניתן לביטול כלל (409 MAKOR-DOC-064); יש להפיק חשבונית זיכוי במקום. אם המקור נמסר או דווח, נדרש מסלול זיכוי. השרת דורש את שתי ההצהרות ומסרב כשקיים שיתוף או משלוח ידוע (MAKOR-DOC-066).
DELETE/documents/{document_id}documents:write

מוחק טיוטה. כל מסמך שכבר ממוספר מחזיר 409 MAKOR-DOC-065 — מסמכים שהופקו הם בלתי ניתנים לשינוי ומבוטלים או מזוכים, לעולם לא נמחקים.

GET/documents/{document_id}/pdfdocuments:read

מחזיר application/pdf. מסמכים חדשים נחתמים ונשמרים בזמן השלמת ההפקה; כל קריאה נוספת מחזירה בדיוק את אותם בייטים, כדי לשמר את קובץ המקור ללא שינוי. הוסיפו ?copy=true לרינדור העתק. לטיוטה אין PDF (409 MAKOR-PDF-001).

POST/documents/{document_id}/sharedocuments:write

יוצר — או מחזיר את הקיים — קישור ציבורי ללקוח: { token, url }. הדף נמצא בכתובת /d/{token}, אינו דורש התחברות, מוגש עם noindex, ומציע את ה-PDF בכתובת /d/{token}/pdf. ניתן לשתף רק מסמכים שהופקו או בוטלו (409 MAKOR-SHARE-001).

לקוחות#

GET/customerscustomers:read

פרמטרים וכותרות

q
stringרשות
חיפוש חופשי בשם, במספר הזיהוי ובאימייל.
limit
integer= 50
מקסימום 200.
POST/customerscustomers:write
name
string ≤200חובה
שם לתצוגה.
tax_id
string (9 ספרות)רשות
יידרש בהמשך אם תפיקו ללקוח חשבונית מעל סף ההקצאה.
email / phone
stringרשות
משמשים למשלוח מסמכים.
address_street / _house / _city / _zip
stringרשות
מודפסים על המסמכים.
country_code
string (2)= "IL"
ISO 3166-1 alpha-2.
withholding_rate_bp
integer 0–5000= 0
שיעור ניכוי במקור ברירת מחדל בנקודות בסיס (500 = 5%), למילוי מראש בקבלות.
notes
string ≤1000רשות
הערה פנימית.
GET/customers/{customer_id}customers:read
PATCH/customers/{customer_id}customers:write

עדכון חלקי. עריכת לקוח לעולם אינה משנה מסמכים שכבר הופקו עבורו — הם נושאים תצלום מוקפא.

DELETE/customers/{customer_id}customers:write

מחיקה רכה (השבתה). ההיסטוריה נשמרת לתקופת השמירה הקבועה בחוק.

פריטים#

קטלוג אופציונלי למילוי מהיר של שורות מסמך.

GET/itemsitems:read

פרמטרים וכותרות

q
stringרשות
חיפוש לפי שם.
limit
integer= 100
מקסימום 500.
POST/itemsitems:write
name
string ≤200חובה
שם הפריט.
name_en
stringרשות
משמש במסמכים באנגלית.
sku
string ≤20רשות
מק"ט פנימי.
unit
string= "יחידה"
יחידת מידה.
unit_price
number (₪)= 0
מחיר ברירת מחדל.
vat_treatment
string= "standard"
standard · exempt · zero.
description
string ≤500רשות
תיאור מורחב.
PATCH/items/{item_id}items:write
DELETE/items/{item_id}items:write

מספור#

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

GET/numbering

מציג את הסדרות האמיתיות (סדרות הניסוי פרטיות): doc_type, doc_type_name_he, series, next_number, configured_start, locked.

PUT/numbering
doc_type
integerחובה
הסוג שאת סדרתו אתם מגדירים.
starting_number
integer ≥ 1חובה
המספר הראשון שיופק. עוברים מפנקס ידני שהקבלה האחרונה בו הייתה 143? הזינו 144.
series
string= "A"
הסדרה שיש להגדיר.
לבעלים בלבד, ומותר רק לפני הפקת המסמך הראשון באותה סדרה — לאחר מכן היא נעולה (409 MAKOR-NUM-002), מפני ששינוי רטרואקטיבי היה שובר את הרצף שהחוק מחייב.

מטבע חוץ#

מסמך נקוב במטבע אחד. השמטת currency פירושה שקלים בשער 1 — בדיוק כמו כל בקשה שנכתבה לפני שהשדה היה קיים.

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

כל מה שהמדינה רואה קורא את הצד השקלי: ייצוא מבנה אחיד מדווח סכומי שקלים (המקור נשמר בשדות 1217/1218), דוחות המע"מ וההכנסות מסכמים בשקלים, וסף ההקצאה של 5,000 ₪ הוא סף שקלי — חשבונית של 1,500$ חוצה אותו.

שני כללים נובעים מכך שלמסמך יש מטבע אחד: סכום במטבע ללא יחידת משנה חייב להיות שלם (MAKOR-CUR-006 — 100.50¥ אינו מחיר), וקבלה סוגרת רק חשבונית באותו מטבע (MAKOR-LINK-006). אין שער שבו קישור דולרי מחסיר מיתרה שקלית.

GET/fx/ratesdocuments:read

פרמטרים וכותרות

currency
stringחובה
קוד ISO 4217, למשל USD.
on
dateרשות
ברירת המחדל היא היום בישראל.

שער בנק ישראל למטבע אחד בתאריך אחד, מנורמל ליחידה אחת (הבנק מפרסם חלק מהמטבעות ל-100). 404 פירושו שהבנק לא פרסם את התאריך הזה — סוף שבוע או חג — ו-503 פירושו שהשירות אינו זמין. שניהם תשובות ולא כשלים: שלחו את השער שברשותכם.

GET/fx/currenciesdocuments:read

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

סריקות (סריקת חשבוניות)#

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

POST/scansscans:write

Multipart עם שדה file יחיד. אופציונלי: direction (expense/income), year, month, external_ref. JPG, PNG או PDF עד 50MB; PDF רב-עמודי הופך לסריקה לכל עמוד. מחזיר 202 עם scan_ids, או 200 עם {"scan_ids": [], "status": "duplicate"} כשאותם בייטים כבר הועלו — ולכן חזרה על העלאה תמיד בטוחה.

GET/scans/{id}scans:read

החילוץ רץ ברקע. עקבו עד ש-status יוצא מ-processing, או האזינו ל-scan.ready. extraction.uncertain_fields הוא המודל מסמן את קריאתו שלו; extraction.warnings הוא החשבון של השרת שחולק עליו. שניהם מסמנים מה לבדוק ואינם חוסמים תיוק.

POST/scans/{id}/approvescans:write

שום דבר אינו נספר בדוח עד לאישור. שלחו רק את מה שתוקן. האישור אוכף את מה שהסקירה רק התריעה עליו: סכום ביניים ועוד מע"מ חייבים להסתכם לסה"כ (MAKOR-SCAN-005), נדרש סה"כ (-009), וסריקה במטבע חוץ מחייבת fx_rate (-010).

GET/scans/{id}/imagescans:read

כשהחילוץ אינו זמין — המתג כבוי או שאין מודל מוגדר — ההעלאה עדיין מצליחה והסריקה נוחתת ב-ready עם שדות ריקים ו-extraction.skipped_reason שמסביר. התייחסו לכך כמקרה רגיל, לא כשגיאה.

שליחה במייל#

קריאה אחת ששולחת ללקוח את המסמך שהופק, עם קובץ ה-PDF מצורף — אותם בייטים ש-GET /documents/{id}/pdf מחזיר, לא רינדור חדש.

POST/documents/{id}/senddocuments:write

שני השדות אופציונליים. השמטת to משתמשת בכתובת שבכרטיס הלקוח; כתובת מפורשת גוברת עליה. ללא אף אחת מהשתיים מוחזר MAKOR-MAIL-002 ולא הצלחה שקטה. ה-From הוא של מקור — כך המסר עובר DKIM בלי שכל עסק יפרסם רשומות DNS — ושם העסק מופיע בנושא ובגוף. Reply-To הוא כתובת העסק, כך שתשובה מגיעה אליו.

GET/documents/{id}/deliveriesdocuments:read

status הוא sent, failed (עם error שמסביר — בטוח לנסות שוב) או captured — מצב ניסוי, שבו ההודעה נבנית ונרשמת ואף פעם אינה נשלחת. כל שליחה מפעילה webhook בשם document.emailed.

GET/email-deliveriesdocuments:read

כל מה שהעסק שלח לאחרונה, החדש קודם. limit עד 100.

עסק שההגדרה email_auto_send שלו דלוקה שולח כל מסמך שמופק, לכל לקוח שיש בכרטיסו כתובת. השליחה רצה אחרי התשובה, וכישלון שליחה לעולם אינו מבטל הפקה — למסמך יש מספר והוא בספרים כך או כך. הכישלון הוא שורת משלוח failed לשליחה חוזרת, לא rollback. מפעיל קובע את ההגדרה ברישום העסק (POST /operator/businesses); לשנות אותה אחר כך יכול רק הבעלים, דרך PATCH /businesses/{id}.

send_email בקריאה שמפיקה את המסמך גובר על ההגדרה של העסק לשני הכיוונים: true שולח גם כשההגדרה כבויה, false עוצר גם כשהיא דלוקה, והשמטה משאירה את ההחלטה לעסק. בטיוטה שמופקת מאוחר יותר שולחים אותו ב-POST /documents/{id}/issue. בקשה שאי אפשר לקיים נדחית לפני שנוצר מסמך — 422 MAKOR-MAIL-002 ללקוח בלי כתובת, 422 MAKOR-DOC-016 על טיוטה — כי זה הרגע היחיד שדחייה לא עולה מספר מסמך. אחריו הכלל הרגיל חוזר: שליחה שנכשלת היא שורת משלוח, לא מסמך שבוטל.

מסמכים חדשים חתומים בתוך ה-PDF באמצעות מפתח נפרד לכל עסק. זוהי חתימה קריפטוגרפית בתעודה פנימית, ללא אישור של ספק חיצוני וללא חותמת זמן חיצונית. מסמכים היסטוריים אינם נחתמים מחדש. עותקים ותצוגת HTML אינם קובץ המקור החתום.

דוחות#

צבירות על מסמכים אמיתיים שהופקו. חשבוניות זיכוי מקוזזות; מסמכי ניסוי לעולם אינם נספרים.

GET/reports/incomereports:read

פרמטרים וכותרות

from_date
dateחובה
כולל.
to_date
dateחובה
כולל.

מחזיר monthly[] (month, total, vat), by_type[] ו-total.

GET/reports/vatreports:read

מע"מ עסקאות לפי חודש: periods[] עם taxable ו-output_vat, בתוספת total_output_vat.

GET/reports/withholdingreports:read

מס שנוכה במקור לפי לקוח — הנתונים שמאחורי התאמת טופס 806 השנתית: customers[] ו-total_withheld.

מבנה אחיד#

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

POST/exports/unified-formatexport:read
from_date
dateחובה
כולל.
to_date
dateחובה
כולל; אסור שיקדם ל-from_date (MAKOR-EXP-001).

בונה את INI.TXT ואת BKMVDATA.TXT (רוחב קבוע, ISO-8859-8, CRLF) בתוך מבנה התיקיות המחייב OPENFRMT/{vat}.{yy}/{MMDDhhmm}, ומחזיר export_id, folder_name, record_counts ואת closing_report — לכל סוג מסמך, הכמות והסכום שרואה החשבון מתאים מולם.

GET/exports/unified-format/{export_id}/downloadexport:read

מחזיר את קובץ ה-ZIP. חברי צוות בתפקיד רואה חשבון יכולים לייצא גם בלי יכולת להפיק מסמכים — זו בדיוק מטרת התפקיד.

Webhooks#

הירשמו לאירועים במקום לתשאל בלולאה. כל משלוח חתום ב-HMAC וכל ניסיון נרשם.

POST/webhooks
url
string (https)חובה
כתובת היעד.
events
string[]חובה
לפחות שם אירוע אחד; שמות לא מוכרים נדחים עם 422 MAKOR-WH-001.

לבעלים בלבד. התשובה כוללת את סוד החתימה secret — מוצג פעם אחת.

אירוענשלחמטען
document.issuedכןdocument_id, doc_type, doc_number, total, allocation_status
allocation.rejectedכןdocument_id, rejection_code
document.emailedכןdocument_id, to, status
scan.readyכןscan_id, status, direction, external_ref
scan.failedכןscan_id, status, direction, external_ref
scan.approvedכןscan_id, total, currency
document.cancelledשמור—
allocation.approvedשמור—
allocation.retro_assignedשמור—
payment.linkedשמור—
export.readyשמור—
ita.authorization_expiringשמור—
אירועים שמסומנים שמור ניתנים כבר היום להרשמה אך עדיין אינם נשלחים — הרשמה עכשיו אומרת שתקבלו אותם ברגע שיושקו, בלי שינוי אצלכם.
delivery
POST https://your-app.example/hooks/makor
X-Makor-Event: document.issued
X-Makor-Signature: t=1786000000,v1=6f2b...c91

{
  "event": "document.issued",
  "created_at": "2026-08-07T12:31:07.481Z",
  "data": {
    "document_id": "019fdad4-...",
    "doc_type": 305,
    "doc_number": 42,
    "total": 7080.0,
    "allocation_status": "approved"
  }
}

אימות החתימה

חשבו HMAC-SHA256(secret, "{t}.{raw body}") על גוף הבקשה הגולמי — פענוח ה-JSON וסריאליזציה מחדש משנים את הבייטים ושוברים את ההשוואה. השוו בזמן קבוע ודחו חותמות זמן ישנות.

Node.js
import crypto from "node:crypto";

export function verify(rawBody, header, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(
    header.split(",").map((kv) => kv.split("=").map((s) => s.trim()))
  );
  const timestamp = Number(parts.t);
  if (!Number.isFinite(timestamp)) return false;
  if (Math.abs(Date.now() / 1000 - timestamp) > toleranceSec) return false;

  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");

  return crypto.timingSafeEqual(
    Buffer.from(expected, "hex"),
    Buffer.from(parts.v1, "hex")
  );
}
Python
import hmac, hashlib, time

def verify(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(kv.split("=", 1) for kv in header.split(","))
    ts = int(parts["t"])
    if abs(time.time() - ts) > tolerance:
        return False
    expected = hmac.new(
        secret.encode(),
        f"{ts}.".encode() + raw_body,
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, parts["v1"])
GET/webhooks
GET/webhooks/{webhook_id}/deliveries

חמישים הניסיונות האחרונים עם event_type, status, response_status ו-attempt — המקום הראשון לבדוק כשאינטגרציה משתתקת.

DELETE/webhooks/{webhook_id}
ענו מהר, עבדו אחר כך
המשלוח פג אחרי 5 שניות. אשרו מיד עם 2xx ובצעו את העיבוד אסינכרונית; התייחסו לכל אירוע כאילו הוא עלול להישלח פעמיים והשתמשו ב-document_id כמפתח.

מפתחות API#

מפתחות מנוהלים בידי משתמשים מחוברים, לא בידי מפתחות אחרים.

POST/api-keys
name
string ≤100חובה
תווית שתוצג בממשק.
scopes
string[]רשות
ברירת מחדל: המקסימום שתפקידכם מתיר. הרשאה לא מוכרת מחזירה 422 MAKOR-KEY-001.
sandbox
boolean= false
יצירת מפתח mk_test_ הקשור לנתוני ניסוי.

מחזיר את key (הסוד המלא, פעם אחת), key_id, ההרשאות שניתנו scopes ו-sandbox.

GET/api-keys

מטא-דאטה בלבד — key_id, name, scopes, sandbox, last_used_at, revoked. הסודות אינם ניתנים לאחזור לעולם.

DELETE/api-keys/{key_id}

מבטל מיידית. נדרש תפקיד בעלים או עובד.

מפעילים#

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

מודל ההרשאות

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

איך זה מתחבר

שלבמי מבצעקריאה
רישום כמפעילאתם, מחוברים לחשבוןPOST /operators
יצירת מפתח מפעילמנהל מפעיל, מחוברPOST /operators/{operator_id}/api-keys
הרשמה לאירועי חיבורמנהל מפעיל, מחוברPOST /operators/{operator_id}/webhooks
הענקת הרשאהבעל העסקPOST /businesses/{business_id}/operators
— או — רישום עסק חדשהמפתח שלכםPOST /operator/businesses
גילוי העסקים שלכםהמפתח שלכםGET /operator/businesses
הפקת מסמכיםהמפתח שלכםPOST /documents + Makor-Business
שאר ה-API אינו משתנה
אין ממשק נפרד למפעילים. אותן קריאות, אותם גופי בקשה, אותן שגיאות — ההבדל היחיד הוא שמפתח מפעיל אינו קשור לעסק אחד, ולכן צריך לומר על מי הוא פועל בכותרת Makor-Business (מזהה העסק או מספר העוסק/ח.פ). אינטגרציה קיימת לעסק בודד הופכת לרב-עסקית בהחלפת המפתח, הוספת הכותרת ולולאה מעל /operator/businesses.

רישום עסק שאתם מביאים

POST/operator/businesses

עד כאן ההנחה הייתה שהעסק כבר רשום ב-Makor והעניק לכם הרשאה. אם אתם מביאים לקוח חדש, הקריאה הזו רושמת אותו ומעניקה לכם הרשאה באותה פעולה. מאומתת במפתח המפעיל שלכם בלבד. מספר עוסק נרשם פעם אחת בלבד: אם הוא כבר שלכם תחזור 409 MAKOR-REG-001 עם מזהה העסק, ואם הוא רשום לגורם אחר תחזור 409 MAKOR-REG-004 — במקרה כזה על העסק לחבר אתכם מהחשבון שלו. אין כאן scopes: ההרשאה נפתחת מלאה, והבעלים מצמצם או מבטל אותה כשהוא תופס את העסק.

legal_name
string 2–200חובה
השם הרשום ברשות המסים — לא שם מסחרי. מודפס על כל מסמך.
tax_id
string (9 ספרות)חובה
מספר עוסק / ח.פ. ספרת הביקורת נבדקת (422 MAKOR-BIZ-002).
entity_type
enumחובה
osek_patur · osek_murshe · company · partnership · amuta. קובע חבות במע״מ ואת סוגי המסמכים.
owner_email
emailחובה
בעל העסק. נוצר לו משתמש, והוא זה שיחבר את רשות המסים ויוכל לבטל את ההרשאה שלכם.
address_street / _house / _city
stringחובה
כתובת העסק, מודפסת על כל מסמך. אחרי הרישום אין אצלנו את מי לשאול — הבעלים עוד לא התחבר.
phone
string 6–30חובה
טלפון העסק.
terms_accepted
booleanחובה
חייב להיות true. false מחזיר 422 MAKOR-REG-003 ולא נוצר דבר.
owner_name
string ≤200רשות
שם הבעלים, למכתב ההזמנה.
address_zip
stringרשות
מיקוד. לא חובה — אינו ניתן לגזירה מכתובת.
occupation
stringרשות
תחום העיסוק.
email
emailרשות
כתובת הקשר של העסק. אם לא נשלחה, נשתמש ב-owner_email.
default_locale
"he" | "en"= "he"
שפת המסמכים.
email_auto_send
boolean= false
האם כל מסמך שהעסק מפיק יישלח גם במייל ללקוח. זה הרגע היחיד שאתם קובעים זאת — לאחר מכן המתג הוא של הבעלים (PATCH /businesses/{id} פתוח לבעלים בלבד).
מה אתם מצהירים, ומה זה לא עושה
אנחנו לא הצגנו את התנאים לבעל העסק — אתם הצגתם, ו-terms_accepted הוא ההצהרה שלכם, לא הוכחה. מה שנשמר אצלנו הוא מה שאנחנו באמת יודעים: איזה מפעיל הצהיר, באיזה מפתח, מתי, ומול איזו גרסת תנאים — את הגרסה ואת השעה אנחנו חותמים, לא אתם. עמדו מאחורי זה. שני דברים שהרישום אינו עושה: הוא אינו הופך אתכם לבעלים — לבעל העסק נשלחת הזמנה והוא יכול לנתק אתכם בכל רגע — והוא אינו מחבר את העסק לרשות המסים. חיבור רשות המסים דורש התחברות אישית של הבעלים, ולכן מספרי הקצאה לא יהיו זמינים עד שיעשה זאת.
GET/operator/businesses

מוחזר data[] עם business_id, legal_name, tax_id, scopes (ההרשאה האפקטיבית) ו-granted_at, יחד עם has_more ו-next_offset. פרמטרים: limit (ברירת מחדל 100, מקסימום 500) ו-offset. זו הקריאה היחידה שבה מפתח מפעיל תקף בלי עסק בנתיב.

אינטגרציה מלאה

Node.js
const KEY = process.env.MAKOR_OPERATOR_KEY;   // mk_op_live_… or mk_op_test_…

const BASE_URL = KEY.startsWith("mk_op_test_")
  ? "https://sandbox.makor.izid.io/api/v1"
  : "https://makor.izid.io/api/v1";

const auth = { Authorization: `Bearer ${KEY}` };

// 1. Ask which businesses have connected you, and what each one allows.
//    Cache this; grant.created / grant.revoked keep it fresh.
const { data } = await (
  await fetch(`${BASE_URL}/operator/businesses`, { headers: auth })
).json();

// 2. From here the API is identical to a single-business integration.
//    The business_id in the path is the only thing that changes.
for (const biz of data) {
  if (!biz.scopes.includes("documents:write")) continue;   // read-only grant

  await fetch(
    `${BASE_URL}/businesses/${biz.business_id}/documents`,
    {
      method: "POST",
      headers: {
        ...auth,
        "Content-Type": "application/json",
        "Idempotency-Key": crypto.randomUUID(),
      },
      body: JSON.stringify({
        doc_type: 320,
        issue_date: new Date().toISOString().slice(0, 10),
        customer_name: "לקוח לדוגמה",
        lines: [
          { description: "מנוי חודשי", quantity: 1, unit_price: 199 },
        ],
        payments: [
          { method: "card", amount: 234.82, card_brand: "Visa" },
        ],
      }),
    }
  );
}
POST/businesses/{business_id}/operators
operator_id
uuidחובה
המפעיל שמקבל את ההרשאה. מפעיל לא מוכר או מושבת מחזיר 404.
scopes
string[]חובה
התקרה שהעסק מעניק. הרשאה לא מוכרת מחזירה 422 MAKOR-KEY-001.

לבעלים בלבד — מפעיל אינו יכול לצרף את עצמו. הרשאה כפולה מחזירה 409 MAKOR-OP-001; הענקה מחדש אחרי ביטול משתמשת באותה רשומה, כך שההיסטוריה של מי היה מחובר נשמרת במקום אחד.

GET/businesses/{business_id}/operators
DELETE/businesses/{business_id}/operators/{grant_id}

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

אירועי חיבור וניתוק

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

אירועמטען
grant.createdgrant_id, business_id, legal_name, tax_id, scopes
grant.revokedgrant_id, business_id

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

מפתח מפעיל נוצר בידי מנהל מפעיל מחובר בלבד — מפתח לא יכול ליצור מפתח נוסף. מוחזר key פעם אחת בלבד, עם קידומת mk_op_live_ או mk_op_test_, כדי שמפתח שדלף יסגיר את היקף הנזק כבר מהמחרוזת.

מצב מול רשות המסים#

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

GET/ita
GET/exports/unified-format/report

אינדקס קודי שגיאה#

כל שגיאת כלל עסקי שה-API יכול להחזיר. הקודים יציבים בין גרסאות — הסתמכו עליהם.

קודHTTPמשמעות ואיך לתקן
MAKOR-401401נדרש אימות — מפתח חסר, לא מוכר או מבוטל.
MAKOR-403403חסרה הרשאה, או תפקיד לקריאה בלבד שמנסה לכתוב.
MAKOR-404404לא נמצא, או שייך לעסק או לסביבה אחרת.
MAKOR-AUTH-001409האימייל כבר רשום.
MAKOR-AUTH-002401אימייל או סיסמה שגויים.
MAKOR-AUTH-003403החשבון מושבת.
MAKOR-BIZ-001422סוג ישות לא מוכר.
MAKOR-BIZ-002422מספר הזיהוי נכשל בבדיקת ספרת ביקורת.
MAKOR-BIZ-003409המשתמש כבר חבר או כבר הוזמן.
MAKOR-BIZ-004403לא ניתן להסיר את חברות הבעלים.
MAKOR-DOC-000422קוד סוג מסמך לא מוכר.
MAKOR-DOC-003422יש לציין בדיוק אחד מבין doc_type ל-doc_kind.
MAKOR-DOC-004422כינוי doc_kind לא מוכר — התשובה מונה את המוכרים.
MAKOR-DOC-013422אין ממה להסיק את סכום ה-payment_method.
MAKOR-DOC-014422נשלחו גם payment_method וגם payments.
MAKOR-DOC-015422ערך payment_method לא מוכר.
MAKOR-DOC-016422send_email:true על טיוטה — לטיוטה אין מה לשלוח.
MAKOR-DOC-017422מזומן מעל המותר בחוק צמצום השימוש במזומן למחיר העסקה.
MAKOR-DOC-018422תאריך המסמך עתידי.
MAKOR-DOC-019422תאריך המסמך מוקדם מהמסמך הקודם בסדרה.
MAKOR-DOC-041422חסר שם לקוח (ולא מדובר במכירה קמעונית במזומן).
MAKOR-REG-001409כבר קיימת לכם הרשאה פעילה על מספר העוסק הזה.
MAKOR-REG-003422terms_accepted חייב להיות true.
MAKOR-REG-004409מספר העוסק כבר רשום במערכת לגורם אחר.
MAKOR-BIZ-005409מספר העוסק מתאים ליותר מעסק אחד שיש לכם גישה אליו — יש לפנות לפי business_id.
MAKOR-BIZ-006422מפתח מפעיל חייב לציין עסק בכותרת Makor-Business.
MAKOR-BIZ-007422בסשן מחובר יש לציין את העסק במפורש.
MAKOR-DOC-001422סוג הישות אינו רשאי להפיק סוג מסמך זה — למשל עוסק פטור שמנסה להפיק חשבונית מס.
MAKOR-DOC-002422למסמך אין שורות.
MAKOR-DOC-010422לקבלה אין שורות תשלום.
MAKOR-DOC-011422שורות התשלום אינן מסתכמות בסכום המסמך — זכרו שניכוי במקור נספר כשורת תשלום.
MAKOR-DOC-012422לתשלום בצ'ק חסר cheque_number — כולל שימוש ב-payment_method: check.
MAKOR-DOC-020422לחשבונית זיכוי חסר parent_id.
MAKOR-DOC-021422ניתן לזכות רק חשבונית מס או חשבונית מס/קבלה.
MAKOR-DOC-022422רק קבלות יכולות לסגור חשבוניות.
MAKOR-DOC-030422סכום חשבונית שלילי — יש להפיק חשבונית זיכוי במקום.
MAKOR-DOC-040422customer_tax_id הוא חובה מעל סף ההקצאה.
MAKOR-DOC-050404ה-customer_id אינו קיים בעסק הזה.
MAKOR-DOC-060409המסמך אינו טיוטה — לרוב בקשת הפקה כפולה.
MAKOR-DOC-061404המסמך לא נמצא.
MAKOR-DOC-062409לא ניתן להשלים הפקה מהסטטוס הנוכחי של המסמך.
MAKOR-DOC-063409טיוטה נמחקת, לא מבוטלת.
MAKOR-DOC-064409למסמך מקושרות קבלות או זיכויים — יש לזכות אותו במקום לבטל.
MAKOR-DOC-065409רק טיוטות ניתנות למחיקה.
MAKOR-LINK-001422החשבונית המקושרת לא נמצאה.
MAKOR-LINK-002422יעד הקישור אינו מסמך שהופק.
MAKOR-LINK-003422קבלות יכולות לסגור רק חשבוניות מס או חשבוניות עסקה.
MAKOR-LINK-004422סכום הקישור חייב להיות חיובי.
MAKOR-LINK-005422סכום הקישור עולה על היתרה הפתוחה של החשבונית — קראו קודם את open_balance.
MAKOR-LINK-006422לא ניתן לקשר מסמכים במטבעות שונים.
MAKOR-CUR-001422מטבע לא נתמך.
MAKOR-CUR-002422מסמך שקלי אינו יכול לשאת שער השונה מ-1.
MAKOR-CUR-003422מסמך במטבע חוץ מחייב fx_rate.
MAKOR-CUR-004422שער החליפין חייב להיות חיובי.
MAKOR-CUR-005422שער החליפין מוגבל לשש ספרות אחרי הנקודה.
MAKOR-CUR-006422למטבע אין יחידת משנה — הסכומים חייבים להיות שלמים.
MAKOR-CUR-007422לשקל אין שער חליפין מול עצמו.
MAKOR-CUR-008503שירות שערי בנק ישראל אינו זמין — יש להזין שער ידנית.
MAKOR-CUR-009404לא פורסם שער לתאריך המבוקש — יש להזין שער ידנית.
MAKOR-ALLOC-001409המסמך אינו ממתין להחלטת הקצאה.
MAKOR-ALLOC-002409גם בקשת היפוך החיוב נדחתה.
MAKOR-ALLOC-003409רק מסמך שהופק יכול לקבל מספר הקצאה בדיעבד.
MAKOR-ALLOC-004409למסמך זה כבר הוקצה מספר הקצאה.
MAKOR-ALLOC-005409מצב ההקצאה של המסמך אינו מאפשר בקשה חדשה.
MAKOR-ALLOC-006422סוג המסמך אינו יכול לשאת מספר הקצאה.
MAKOR-ALLOC-007422לא ניתן לבקש מספר הקצאה ללא מספר עוסק/ח.פ של הלקוח.
MAKOR-ALLOC-008409חלפה יותר משנה מתאריך החשבונית.
MAKOR-ALLOC-009409העסק אינו מחובר לרשות המסים.
MAKOR-NUM-001422סוג המסמך אינו זמין לסוג הישות הזה.
MAKOR-NUM-002409המספור נעול — כבר הופקו מסמכים בסדרה זו.
MAKOR-IDEM-001422מפתח אידמפוטנטיות שומש עם גוף בקשה שונה.
MAKOR-IDEM-002409הבקשה המקורית עדיין בעיבוד — נסו שוב בעוד רגע.
MAKOR-PAGE-001422קורסור עימוד פגום.
MAKOR-PDF-001409לטיוטות אין PDF.
MAKOR-SHARE-001409ניתן לשתף רק מסמכים שהופקו.
MAKOR-MAIL-001503שליחת מייל אינה מוגדרת בשרת הזה.
MAKOR-MAIL-002422אין כתובת מייל ללקוח — יש להזין אחת ב-to.
MAKOR-MAIL-003422כתובת המייל אינה תקינה.
MAKOR-MAIL-004409ניתן לשלוח רק מסמך שהופק.
MAKOR-MAIL-005502שרת הדואר דחה את ההודעה — אפשר לנסות שוב.
MAKOR-EXP-001422טווח תאריכים לא חוקי לייצוא.
MAKOR-EXP-002422סוף טווח התאריכים לא יכול להיות עתידי.
MAKOR-EXP-003422נתיב השמירה ארוך מדי עבור שדה הנתיב בקובץ.
MAKOR-UNI-001409ייצוא מבנה אחיד אינו מוגדר בצד השרת.
MAKOR-KEY-001422התבקשה הרשאה לא מוכרת.
MAKOR-WH-001422שם אירוע webhook לא מוכר.
MAKOR-OP-001409המפעיל כבר מורשה בעסק הזה — בטלו קודם כדי לשנות הרשאות.
MAKOR-ITA-001409קריאת ה-OAuth של רשות המסים אינה רלוונטית במצב הנוכחי.

מגבלות וגרסאות#

ניהול גרסאות
/api/v1
הגרסה נמצאת בנתיב. שינויים מוסיפים (שדות, endpoints וערכים חדשים) יוצאים בלי העלאת גרסה — פרסו בזהירות והתעלמו משדות לא מוכרים.
הגבלת קצב
אין אכיפה
אין מכסה קשיחה כיום. שמרו על מקביליות סבירה; ההפקה מסודרת במכוון בטור לכל סדרת מספור, כך שהפקה מקבילה של אותו סוג מסמך לא תזרז דבר.
גודל בקשה
מעשי
אין תקרה קבועה, אך שמרו על מספר שורות סביר במסמך — הוא צריך להתרנדר לקובץ PDF להדפסה.
שמירת נתונים
7 שנים
מסמכים שהופקו וקובצי המקור שלהם נשמרים לתקופה הקבועה בחוק ואינם ניתנים למחיקה דרך ה-API.
משהו לא ברור או חסר?
המדריך האינטראקטיבי בכתובת /api/docs נוצר מהסכמה החיה ותמיד תואם לגרסה שרצה — אם הדף הזה והסכמה אי פעם סותרים, הסכמה קובעת.