← חזרה ל-Billbook

API לרישום חשבונאי מרחוק

עודכן לאחרונה: 10 במאי 2026

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

1. קבלת טוקן

התחבר כ-admin, פתח הגדרות → 🔑 API לרישום חשבונאי מרחוק ולחץ "צור טוקן".

הטוקן בטקסט גלוי מוצג פעם אחת בלבד — העתק מיד. השרת שומר רק את ה-hash מסוג SHA-256, ולכן ניתן להחליף טוקן אבוד רק באמצעות החלפה (שמבטלת את הישן).

פורמט הטוקן: bb_<userId>_<secret>. שלח בכל בקשה בתור Authorization: Bearer <token>.

2. POST /api/ingest — הוספת עסקה אחת

גוף הבקשה הוא אובייקט JSON עם השדות הבאים:

  • title (string, חובה) — שם העסקה
  • amount (number, חובה) — חייב להיות חיובי
  • type (string, אופציונלי, ברירת מחדל expense) — אחד מ-expense / income / prepaid_expense / pending_income
  • category (string, אופציונלי) — שם הקטגוריה
  • note (string, אופציונלי) — הערה חופשית
  • created_at (string, אופציונלי) — ISO 8601; ברירת המחדל היא עכשיו
curl -X POST https://billbook.me/api/ingest \
  -H "Authorization: Bearer bb_<userId>_<secret>" \
  -H "Content-Type: application/json" \
  -d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'

# response: 201
{ "id": "...", "created_at": "..." }

3. GET /api/ingest/categories — רשימת קטגוריות

מחזיר את שמות הקטגוריות של ה-admin בסדר הרשימה הנפתחת בלוח הבקרה. התגובה מכילה רק שמות — ללא ids, user ids או נתוני עסקה.

curl https://billbook.me/api/ingest/categories \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "categories": ["Food", "Rent", "..."] }

4. GET /api/ingest/tags — תגיות שהשתמשו בהן לאחרונה

מחזיר את תחיליות התגיות שעודכנו לאחרונה (סימני #XXX המוטמעים בכותרות). ברירת מחדל 20; השתמש ב-?limit= כדי לעקוף (מקסימום 100).

מחזיר מערך ריק במקום שגיאה אם הטבלה tag_prefixes עדיין לא קיימת.

curl "https://billbook.me/api/ingest/tags?limit=20" \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }

5. קודי שגיאה

כל השגיאות הן בפורמט JSON: { "error": "הודעה" }.

  • 401 — חסר אישור, פורמט טוקן שגוי, בוטל או לא תואם
  • 402 — תוקף המנוי פג; חידוש נדרש לכתיבה
  • 405 — שיטה לא נתמכת (למשל GET על /api/ingest)
  • 501 — לשרת חסר SUPABASE_SERVICE_ROLE_KEY
  • 500 — שגיאה פנימית אחרת

6. אבטחה ומגבלות

מתכנן, הטוקן יכול לכתוב רק לארגון שלו — לא יכול להתחזות ל-orgs אחרים או לקרוא נתונים קיימים:

  • user_id תמיד שייך לבעל הטוקן; לא ניתן לזייף
  • org_id תמיד שייך ל-org של הבעלים; כתיבה בין orgs היא בלתי אפשרית
  • טוקנים מונפקים רק לתפקיד admin (manager / staff מקבלים 403)
  • התגובות לא חושפות שורות אחרות — רק { id, created_at } מוחזר
  • הביטול מיידי; ניתן לסובב בכל עת מההגדרות

7. דוגמת קיצור דרך ל-iOS

הוסף פעולת "Get Contents of URL", URL https://billbook.me/api/ingest, שיטה POST, כותרות Authorization: Bearer bb_... ו-Content-Type: application/json, וגוף JSON: {"title":"קפה","amount":120,"type":"expense"}. חבר את title ו-amount לקלט הקיצור או למשתני "שאל בכל פעם".

מסמך זה הוא הפניה מהירה; קוד ה-backend הוא מקור האמת להתנהגות בפועל.