← العودة إلى Billbook

واجهة برمجة المحاسبة عن بعد

آخر تحديث: 10 مايو 2026

سجّل القيود من cURL أو اختصارات iOS أو نصوص الأتمتة باستخدام رمز API شخصي. الرمز مخصص للكتابة فقط — يمكنه إدراج المعاملات وقراءة قوائم الفئات / العلامات، لكنه لا يستطيع قراءة أو حذف أي بيانات معاملات.

1. الحصول على رمز

سجّل الدخول كـ admin، وافتح الإعدادات ← 🔑 واجهة برمجة المحاسبة عن بعد وانقر "إنشاء رمز".

يُعرض الرمز النصي مرة واحدة فقط — انسخه فورًا. يحفظ الخادم فقط تجزئة 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 بترتيب القائمة المنسدلة في لوحة التحكم. تحتوي الاستجابة على الأسماء فقط — بدون أي معرفات أو بيانات معاملات.

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 المالك؛ الكتابة عبر المؤسسات مستحيلة
  • الرموز تُصدر فقط لدور admin (manager / staff يحصلون على 403)
  • الاستجابات لا تكشف صفوفًا أخرى — يُرجع فقط { id, created_at }
  • الإلغاء فوري؛ يمكن التدوير في أي وقت من الإعدادات

7. مثال اختصار iOS

أضف إجراء "Get Contents of URL"، الرابط https://billbook.me/api/ingest، الطريقة POST، الترويسات Authorization: Bearer bb_... و Content-Type: application/json، وجسم الطلب JSON: {"title":"قهوة","amount":120,"type":"expense"}. اربط title و amount بمدخل الاختصار أو متغيرات "اسأل في كل مرة".

هذا المستند مرجع سريع؛ كود الخلفية هو المصدر الموثوق للسلوك الفعلي.